web-dev-qa-db-ja.com

C ++ ISO noexcept / noexcept

C++標準 には、次の定義があります。

_template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
      noexcept(noexcept(swap(*a, *b)));
_

noexcept(noexcept(swap(*a, *b)))は何をしますか?

31
yonutix

関数宣言にnoexcept(x)specifier があることは、xtrueと評価される場合にのみ、関数がスローされないことを意味します。

noexcept(y)operator としても使用でき、trueが非スロー式の場合はyと評価され、false if yがスローする可能性がある場合。

結合すると、これはvoid foo() noexcept(noexcept(y));が意味することを意味します:fooがスローされない場合、yはスローされません。

問題のケースでは、配列の関数テンプレートswapは、配列の個々のメンバーのスワップがスローされない場合にのみスローされないように宣言されています。

48
Angew