我正在编写一个应该非常有效的迭代器,我想知道是否可以声明运算符operator->()
,operator*()
因为noexcept
它们只会在底层指针上调用相同的运算符(但如果指针指向不可用的内存部分,那么程序可能会崩溃)?
问问题
273 次
1 回答
1
为什么你需要?你的编译器知道你的代码,如果你从不抛出你在操作符中所做的事情,你就不会得到异常处理开销。
但是,如果您在这些运算符中执行某些可能会抛出的操作,则从语义上讲,您不能使用说明符(除非您希望程序在抛出时立即退出)。
我个人认为noexcept
不会产生任何可衡量的性能提升,但在最模糊的极端情况下——支持它的编译器正在生成的后端代码不会对不抛出的代码造成性能损失。对我来说,noexcept
更多的是编译时可检查noexcept(expression)
运算符形式的语言功能。比较Bjarne 的常见问题解答。
于 2015-10-18T22:29:50.780 回答