我正在编写一个非常有效的迭代器,我想知道我是否可以将运算符operator->()
和operator*()
声明为noexcept
,因为它们只会在底层调用相同的运算符指针(但如果指针指向不可用的内存部分,那么程序可能会崩溃)?
答案 0 :(得分:1)
你为什么需要?您的编译器知道您的代码,如果您从未投入操作员的操作,则不会获得异常处理开销。
但是,如果您在这些操作符中执行某些操作,可能会抛出,您在语义上无法使用该说明符(除非您希望程序在抛出时立即退出)。
我个人认为noexcept
不会产生任何可衡量的性能提升,但最晦涩的角落案例 - 支持它的编译器正在生成后端代码,对于没有&#39的代码没有性能损失扔掉。对我而言,noexcept
更像是编译时可检查noexcept(expression)
operator形式的语言功能。比较Bjarne's FAQ。