【发布时间】:2012-10-01 17:52:17
【问题描述】:
throw() 和 noexcept 除了分别在运行时和编译时检查之外,还有什么区别吗?
This Wikipedia C++11 article 建议弃用 C++03 抛出说明符。
为什么会这样,noexcept 是否足以在编译时涵盖所有这些?
[注意:我检查了this question 和this article,但无法确定弃用的确切原因。]
【问题讨论】:
-
根据 nice article 和
noexcept可能会导致运行时检查。它们之间的主要区别在于破坏noexcept导致std::terminate而破坏throw导致std::unexpected。在这些情况下,堆栈展开行为也略有不同。 -
没有任何“编译时”检查与某些异常规范是“运行时”检查其他。这只是 C++ 异常规范的反对者创造的神话。
标签: c++ exception c++11 throw noexcept