noexceptを実用的にはどのように使っていますか？


noexceptに関する解説を見ると、その関数が例外を送出しないときに指定するという説明がありました。実用的にはどのような目的のために用いられるのでしょうか。みなさんは、普段の開発で、最終的にはどのような目的を達成するためにnoexceptを用いていますでしょうか。




> 実用的にはどのような目的のために用いられるのでしょうか。

`noexcept`指定子の利用目的は、大きく2つあります。

  * 安全性保障：デストラクタからの例外送出などの危険な処理を避ける
  * 処理効率化：例外送出なしを利用してより効率的な実装を用いる

注意点として、`noexcept`指定有無は外部公開インタフェースの一部とみなされます。ある関数に`noexcept`指定を付けるということは「この関数の外部仕様として例外送出しない」という宣言ですから、将来的には例外送出の可能性があるならば付与してはいけません（非常に気づきにくい破壊的なAPI仕様変更につながります）。

* * *

`noexpcet`の利用については [C++ Core
Guideline](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)（同[タイトル日本語訳](https://qiita.com/tetsurom/items/322c7b58cddaada861ff)）にいくつかガイドライン項目が示されています。

  * [F.6: If your function must not throw, declare it `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept)
  * [C.37: Make destructors `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-noexcept)
  * [C.66: Make move operations `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c66-make-move-operations-noexcept)
  * [C.83: For value-like types, consider providing a `noexcept` swap function](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c83-for-value-like-types-consider-providing-a-noexcept-swap-function)
  * [C.85: Make swap `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c85-make-swap-noexcept)
  * [C.86: Make `==` symmetric with respect to operand types and `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c86-make--symmetric-with-respect-to-operand-types-and-noexcept)
  * [C.89: Make a hash `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c89-make-a-hash-noexcept)
  * [E.12: Use `noexcept` when exiting a function because of a `throw` is impossible or unacceptable](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Re-noexcept)

