除了noexcept之外的C ++ ISO noexcept

时间:2018-02-09 10:39:31

标签: c++ 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)))做了什么?

1 个答案:

答案 0 :(得分:48)

在函数声明中使用noexcept(x) specifier意味着当且仅当x求值为true时,该函数才是非投掷的。

noexcept(y)也可以用作operator,如果true是非投掷表达式,则评估为yfalse如果y则评估为void foo() noexcept(noexcept(y)); 1}}可能会抛出。

合并后,这意味着foo表示:yswap非投掷时完全不投掷。

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