C++ ISO noexcept 的 noexcept

C++ ISO noexcept of noexcept

the C++ standard中有如下定义:

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

noexcept(noexcept(swap(*a, *b))) 是做什么的?

在函数声明中包含 noexcept(x) specifier 意味着当且仅当 x 的计算结果为 true.[=24= 时,该函数才不会抛出]

noexcept(y) 也可以用作 operator,如果 y 是非抛出表达式则计算为 true,如果为 false y 可能会抛出。

组合,这意味着 void foo() noexcept(noexcept(y)); 意味着: foo 不抛出恰好当 y 不抛出。

在问题的案例中,数组的函数模板 swap 被声明为非抛出当且仅当交换数组的各个成员是非抛出时,这是有道理的。