質問: noexceptに関する解説を見ると、その関数が例外を送出しないときに指定するという説明がありました。実用的にはどのような目的のために用いられるのでしょうか。みなさんは、普段の開発で、最終的にはどのような目的を達成するためにnoexceptを用いていますでしょうか。
回答: `noexcept` は [c++11](/questions/tagged/c%2b%2b11 "'c++11' のタグが付いた質問を表示") で導入された仕様ですから [c++98](/questions/tagged/c%2b%2b98 "'c++98' のタグが付いた質問を表示") や [c++03](/questions/tagged/c%2b%2b03 "'c++03' のタグが付いた質問を表示") にはありませんでした。なのでその昔から維持しているコードでは使っていません・使えませんでした。逆に [c++98](/questions/tagged/c%2b%2b98 "'c++98' のタグが付いた質問を表示") / [c++03](/questions/tagged/c%2b%2b03 "'c++03' のタグが付いた質問を表示") のレガシーな「例外仕様 (Exception Specification) 」は [c++11](/questions/tagged/c%2b%2b11 "'c++11' のタグが付いた質問を表示") で非推奨 [c++17](/questions/tagged/c%2b%2b17 "'c++17' のタグが付いた質問を表示") で削除になっています。 で、いつ使うかですが、 * デストラクタ中で例外を投げてはならない、を保証する デストラクタの中(だけ)で使う作業関数に `noexcept` を明示するとこれが自動で担保できる * 例外機構のための命令を生成させないことにより省メモリ高速化を実現する 例外トラップのための準備などに機械語レベルで数命令必要なことがありますが、これを省ける * 例外処理そのものを実装するためのライブラリソースコードで使える * 割り込みハンドラなど例外機構と相性が悪いところで使える 例外自体を一切使わない(組み込み系だと Embedded C++ なんてのもあるが死産状態)となると既存の [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") ソースコードすべてを再実装になってしまうので `noexcept` を積極的に使う場面はかなり限られると思います。 # オイラの場合組み込み系 [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") コンパイラが [c++11](/questions/tagged/c%2b%2b11 "'c++11' のタグが付いた質問を表示") に未対応なことが多い関係で、メインのお仕事では一度も使ったことないです