知识卡片
noexcept是契约
内容
noexcept 声明异常不会逃出函数,是调用者可依赖的接口承诺,也会影响容器采用移动还是复制的策略。只有能够保证或处理异常时才承诺;违反承诺会终止程序。多数函数应传播异常,不能为追求优化随意加 noexcept。
参考来源
- 位置:《Effective Modern C++》第3章《移步现代C++》,条款十四:如果函数不抛出异常请使用 noexcept(源文件:_epub-src/EPUB/text/ch004.xhtml)
- 结论依据:原文把 noexcept 作为接口承诺,讨论移动优化和多数函数只传播异常的现实边界。
- 原始内容:noexcept 是函数接口的一部分,这意味着调用者可能会依赖它 noexcept 函数较之于non- noexcept 函数更容易优化 noexcept 对于移动语义, swap ,内存释放函数和析构函数非常有用 大多数函数是异常中立的(译注:可能抛也可能不抛异常)而不是 noexcept