Является ли по умолчанию конструктор std :: string no-throw?

Можно
std :: string s;
бросить при каких обстоятельствах? Регулируется ли это стандартом (интересует C ++ 03, если есть различия)?

3

Решение

Это было изменено WG21 / N4002. Первый рабочий документ содержит его, я вижу, WG21 / N4296:

// 21.4.2, construct/copy/destroy:
basic_string() noexcept : basic_string(Allocator()) { }

3

Другие решения

В C ++ 11 конструктор по умолчанию фактически принимает один (по умолчанию) аргумент, а именно allocator (21.4.2):

explicit basic_string(const Allocator& a = Allocator());

Этот конструктор не объявлен как noexcept, (Я предполагаю, что это потребовало бы, чтобы у распределителя был конструктор копирования без бросков.) Как указывают Джонатан и Бо, конструктор копирования распределителя не должен выбрасывать какие-либо исключения, но конструктору строки разрешается выполнять операции выброса (например, выделять начальный фрагмент памяти). Конечно, должно быть возможно написать строковый класс, который как не-бросающий, constexpr конструктор, но стандартная строка библиотеки не указана, чтобы быть такой.

5

Конечно, если распределение по какой-либо причине невозможно

-1
По вопросам рекламы [email protected]