std::exception::exception
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
exception() throw(); |
(до C++11) | |
exception() noexcept; |
(начиная с C++11) | |
| (2) | ||
exception( const exception& other ) throw(); |
(до C++11) | |
exception( const exception& other ) noexcept; |
(начиная с C++11) | |
Создаёт новый объект исключения.
1) Конструктор по умолчанию. what() возвращает строку, определяемую реализацией.
2) Конструктор копирования. Инициализирует содержимое из
other. Если *this и other имеют динамический тип std::exception, тогда std::strcmp(what(), other.what()) == 0.Параметры
| other | — | другое исключение, содержимое которого присвоить |
Примечание
Поскольку копирование std::exception не позволяет создавать исключения, когда производные классы (такие как std::runtime_error) должны управлять определяемым пользователем диагностическим сообщением, оно обычно реализуется как строка копирования при записи.
Реализация Microsoft включает в себя нестандартные конструкторы, принимающие строки, что позволяет создавать экземпляры напрямую с осмысленным сообщением об ошибке. Ближайшими стандартными эквивалентами являются std::runtime_error или std::logic_error.
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 471 | C++98 | нет требований к what() копии исключения | добавлены |