noexcept对我来说,使用非常清楚,因为现代优化的标记函数的方式是无抛出异常保证
struct A {
A() noexcept;
};
Run Code Online (Sandbox Code Playgroud)
在有效的现代c ++的第14项中,我发现了以下语法,称为有条件的noexcept
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是一个参数?
有人可以详细说明这种用法的语法和语义noexcept吗?
附:
template<class T, size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
(1) (2)
Run Code Online (Sandbox Code Playgroud)
关键字noexcept可以在两个上下文中使用:
noexcept运算符bool.noexcept说明符.该形式可选地采用一个bool常量表达式来确定该函数是否noexcept存在.在您粘贴的代码中,
noexcept ( noexcept(swap(*a, *b)))
^^^^^^^^ ^^^^^^^^
specifier operator
Run Code Online (Sandbox Code Playgroud)