查看 std::exception
的定义,除了析构函数,其他包括默认构造和拷贝构造在内的函数都声明为 noexcept
:
因为不允许复制
std::exception
抛出异常,故当派生类(例如std::runtime_error
)必须管理用户定义的诊断信息时,常将它实现为写时复制的字符串。
查看 std::logic_error
的定义 或 std::runtime_error
的定义:
因为不容许复制
std::logic_error
抛出异常,通常将此消息在内部存储为分离分配的引用计数字符串。这也是构造函数不接收std::string&&
参数的理由:无论如何它必须复制内容。