私は非常に効率的なイテレータを書いています.演算子を宣言できるかどうか疑問に思っていoperator->()
ました.プログラムがクラッシュする可能性があります)?operator*()
noexcept
1 に答える
1
なぜあなたはする必要がありますか?コンパイラはコードを認識しており、演算子で行っていることをスローしない場合、例外処理のオーバーヘッドは発生しません。
ただし、これらの演算子内でスローする可能性のある何かを行うと、意味的に指定子を使用できません (スロー時にプログラムをすぐに終了させたい場合を除きます)。
個人的には、測定可能なパフォーマンスの向上が得られるとは思いませんnoexcept
が、最もあいまいなコーナーケース-それをサポートするコンパイラは、スローしないコードのパフォーマンスペナルティを持たないバックエンドコードを生成しています. 私にとってnoexcept
は、コンパイル時にチェック可能なnoexcept(expression)
operatorという形の言語機能です。Bjarne の FAQを比較してください。
于 2015-10-18T22:29:50.780 に答える