Проблема с типом параметра конструктора исключений в стандартной библиотеке.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с типом параметра конструктора исключений в стандартной библиотеке.

Сообщение Anonymous »

В стандартной библиотеке тип параметра конструктора класса исключения, например std::runtime_error, соответствует следующему шаблону:

Код: Выделить всё

runtime_error( const std::string& what_arg ); // (1)
runtime_error( const char* what_arg );        // (2)
runtime_error( const runtime_error& other );  // (3)
Меня смутило то, что (1) использовал const std::string& вместо std::string, что, очевидно, приводит к дополнительной операции копирования внутри конструктора.
Если бы тип параметра был std::string, это не только позволило бы избежать дополнительной операции копирования, но также было бы noException; к такому выводу я недавно пришел:
Если функция, отмеченная как noException, имеет параметр типа, который может вызвать исключение во время его создания, то даже если исключение гарантированно будет выброшено, это не приведет к завершению работы программы из-за исключения.
Это подтверждается тестовой программой.
Итак, почему список параметров конструктора исключений стандартной библиотеки не использует std::string? Или мое понимание и вывод, как и тестовая программа, неверны даже при неопределенном поведении?

Подробнее здесь: https://stackoverflow.com/questions/793 ... rd-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»