noexcept operators ->() 和 operator*() 用于迭代器?

noexcept operators ->() and operator*() for an iterator?

我正在编写一个应该非常高效的迭代器,我想知道我是否可以将运算符 operator->()operator*() 声明为 noexcept,因为它们只会调用相同的运算符底层指针(但如果指针指向不可用的内存部分,那么程序很可能会崩溃)?

为什么需要?您的编译器 知道 您的代码,如果您从不在运算符中执行操作,则不会产生异常处理开销。

但是,如果您在这些运算符中执行某些操作,可能会抛出异常,则语义上不能使用说明符(除非您希望程序在抛出异常时立即退出)。

我个人认为 noexcept 不会产生任何可衡量的性能提升,但在最模糊的极端情况下——支持它的编译器正在生成后端代码,对于不支持它的代码没有性能损失扔。对我来说,noexcept 更像是编译时可检查 noexcept(expression) operator. Compare Bjarne's FAQ.

形式的语言特性