0
我正在寫一個應該非常高效的迭代器,我想知道我是否可以聲明運算符operator->()
和operator*()
爲noexcept
,因爲它們只會調用基礎指針上的相同運算符(但如果指針指向非可用內存部分,那麼程序很可能會崩潰)?noexcept運算符 - >()和運算符*()的迭代器?
我正在寫一個應該非常高效的迭代器,我想知道我是否可以聲明運算符operator->()
和operator*()
爲noexcept
,因爲它們只會調用基礎指針上的相同運算符(但如果指針指向非可用內存部分,那麼程序很可能會崩潰)?noexcept運算符 - >()和運算符*()的迭代器?
爲什麼你需要?你的編譯器知道你的代碼,如果你永遠不會在你的操作符中做什麼,你不會得到異常處理開銷。如果你在這些操作符內部做些什麼,可能會拋出,你在語義上不能使用說明符(除非你希望你的程序在拋出時立即退出)。
我個人不認爲noexcept
會產生任何可衡量的性能提升,但最隱祕的角落案例 - 支持它的編譯器正在生成後端代碼,對不拋出的代碼沒有性能損失。對我而言,noexcept
更多的是編譯時檢查noexcept(expression)
operator形式的語言特性。比較Bjarne's FAQ。