除了noexcept之外的C++ ISO noexcept

yon*_*tix 29 c++ noexcept

C++标准中,有以下定义:

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

怎么noexcept(noexcept(swap(*a, *b)))办?

Rei*_*ica 47

在函数声明中使用noexcept(x) 说明符意味着当且仅当x求值时函数是非抛出的true.

noexcept(y)也可以用作运算符,计算trueif y是非抛出表达式,以及falseif是否y可能抛出.

结合起来,这意味着void foo() noexcept(noexcept(y));:foo非投掷时y非投掷.

在问题的情况下,swap当且仅当交换数组的各个成员是非投掷时,数组的函数模板被声明为非抛出,这是有意义的.

  • 很好的答案,也许有人可能想阅读[参考](http://en.cppreference.com/w/cpp/language/noexcept). (4认同)
  • @gsamaras好点,谢谢.链接已添加. (2认同)