[英]noexcept operators ->() and operator*() for an iterator?
我正在編寫一個效率很高的迭代器,我想知道是否可以將操作符operator->()
和operator*()
為noexcept
因為它們只會在基礎指針上調用相同的運算符(但如果指針指向到不可用的內存部分,則程序可能會崩潰)?
為什么要這樣? 您的編譯器知道您的代碼,並且如果您從不扔掉您在運算符中所做的事情,那么您將不會獲得異常處理開銷。
但是,如果您在這些運算符中執行可能會拋出的操作,則從語義上講不能使用該說明符(除非您希望程序在拋出時立即退出)。
我個人認為noexcept
在最晦澀的noexcept
不會帶來任何可衡量的性能提升-支持它的編譯器正在生成后端代碼,該后端代碼不會對不會拋出的代碼造成性能損失。 對我來說, noexcept
更是一種可編譯時可檢查的noexcept(expression)
運算符形式的語言功能。 比較Bjarne的FAQ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.