0
我正在写一个应该非常高效的迭代器,我想知道我是否可以声明运算符operator->()
和operator*()
为noexcept
,因为它们只会调用基础指针上的相同运算符(但如果指针指向非可用内存部分,那么程序很可能会崩溃)?noexcept运算符 - >()和运算符*()的迭代器?
我正在写一个应该非常高效的迭代器,我想知道我是否可以声明运算符operator->()
和operator*()
为noexcept
,因为它们只会调用基础指针上的相同运算符(但如果指针指向非可用内存部分,那么程序很可能会崩溃)?noexcept运算符 - >()和运算符*()的迭代器?
为什么你需要?你的编译器知道你的代码,如果你永远不会在你的操作符中做什么,你不会得到异常处理开销。如果你在这些操作符内部做些什么,可能会抛出,你在语义上不能使用说明符(除非你希望你的程序在抛出时立即退出)。
我个人不认为noexcept
会产生任何可衡量的性能提升,但最隐秘的角落案例 - 支持它的编译器正在生成后端代码,对不抛出的代码没有性能损失。对我而言,noexcept
更多的是编译时检查noexcept(expression)
operator形式的语言特性。比较Bjarne's FAQ。