13

noexcept の使用にどれだけ注意を払うべきかについて、社内で議論が持ち上がりました。noexcept は、コンパイラのオプティマイザーに対して実際にはそれほど多くのことをしないことを知っていますnoexcept はstd::move_if_noexcept<>を使用するコード用で、ほとんどが STL コンテナーとそのアルゴリズムであると想定されます。

したがって、評価は次のようになります。次の場合を除き、noexcept を使用しないでください

  1. callable の実装がコンパイラに認識されない extern 関数およびクラス。

  2. コンストラクターを移動し、代入演算子を移動し、STL コンテナーに含まれる可能性のある型を交換します。

  3. それ以外の場合は、心配しないでください。

これは公正な評価ですか?何かが noexcept の場合に、より最適なコードを生成する STL の他の場所はありますか? もしそうなら、これはどのSTL実装であり、それが機能するためにnoexceptとマークする必要があるものは何ですか?また、どのようなパフォーマンス上の利点(メモリ割り当ての削減、複雑さの軽減)が得られますか?

編集: CashCowの提案された文言の変更を行いました。

4

1 に答える 1