noexcept运算符 - >()和运算符*()用于迭代器?

时间:2015-10-18 22:17:42

标签: c++ exception iterator c++14 noexcept

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

1 个答案:

答案 0 :(得分:1)

你为什么需要?您的编译器知道您的代码,如果您从未投入操作员的操作,则不会获得异常处理开销。

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

我个人认为noexcept不会产生任何可衡量的性能提升,但最晦涩的角落案例 - 支持它的编译器正在生成后端代码,对于没有&#39的代码没有性能损失扔掉。对我而言,noexcept更像是编译时可检查noexcept(expression) operator形式的语言功能。比较Bjarne's FAQ