标签: 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)))做了什么?
noexcept(noexcept(swap(*a, *b)))
答案 0 :(得分:48)
在函数声明中使用noexcept(x) specifier意味着当且仅当x求值为true时,该函数才是非投掷的。
noexcept(x)
x
true
noexcept(y)也可以用作operator,如果true是非投掷表达式,则评估为y,false如果y则评估为void foo() noexcept(noexcept(y)); 1}}可能会抛出。
noexcept(y)
y
false
void foo() noexcept(noexcept(y));
合并后,这意味着foo表示:y在swap非投掷时完全不投掷。
foo
swap
在问题的情况下,数组的函数模板"被声明为非抛出,当且仅当交换数组的各个成员是非抛出时才有意义。
"