【发布时间】:2022-01-02 20:22:31
【问题描述】:
根据 C++ 标准,C++ 标准库的实现是否允许加强标准定义的 C++ 标准库的方法和其他功能的noexcept 规范?
例如,如果 C++ 标准将某些函数 std::f 指定为 void f();,是否允许标准库实现将其实现为 void f() noexcept;?
【问题讨论】:
-
所有实现在能够证明不会发生异常的情况下都会删除异常处理代码。
noexcept关键字更多地是关于如果调用堆栈中有人对编译器撒谎该怎么办。 -
@RichardHodges 对我来说,
noexcept只是一个可以在代码中检查的函数契约。 “不抛出”函数的概念一直存在,但现在我们可以在我们的代码中验证它,如果我们想制作一些“异常不安全但更快”的代码。低级代码生成与我几乎无关。 -
@KABoissonneault 我认为我们在说同样的话 - 你说得比我好:)
标签: c++ language-lawyer c++-standard-library noexcept