noexcept operators ->() 和 operator*() 用于迭代器?
noexcept operators ->() and operator*() for an iterator?
我正在编写一个应该非常高效的迭代器,我想知道我是否可以将运算符 operator->()
和 operator*()
声明为 noexcept
,因为它们只会调用相同的运算符底层指针(但如果指针指向不可用的内存部分,那么程序很可能会崩溃)?
为什么需要?您的编译器 知道 您的代码,如果您从不在运算符中执行操作,则不会产生异常处理开销。
但是,如果您在这些运算符中执行某些操作,可能会抛出异常,则语义上不能使用说明符(除非您希望程序在抛出异常时立即退出)。
我个人认为 noexcept
不会产生任何可衡量的性能提升,但在最模糊的极端情况下——支持它的编译器正在生成后端代码,对于不支持它的代码没有性能损失扔。对我来说,noexcept
更像是编译时可检查 noexcept(expression)
operator. Compare Bjarne's FAQ.
形式的语言特性
我正在编写一个应该非常高效的迭代器,我想知道我是否可以将运算符 operator->()
和 operator*()
声明为 noexcept
,因为它们只会调用相同的运算符底层指针(但如果指针指向不可用的内存部分,那么程序很可能会崩溃)?
为什么需要?您的编译器 知道 您的代码,如果您从不在运算符中执行操作,则不会产生异常处理开销。
但是,如果您在这些运算符中执行某些操作,可能会抛出异常,则语义上不能使用说明符(除非您希望程序在抛出异常时立即退出)。
我个人认为 noexcept
不会产生任何可衡量的性能提升,但在最模糊的极端情况下——支持它的编译器正在生成后端代码,对于不支持它的代码没有性能损失扔。对我来说,noexcept
更像是编译时可检查 noexcept(expression)
operator. Compare Bjarne's FAQ.