使用noexcept
对我来说非常清楚,因为现代优化的标记功能的方法是无抛出异常保证
struct A {
A() noexcept;
};
在有效的现代c ++ 的第14项中,我发现了以下语法,称为有条件noexcept
template<class T, size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
我得到它的方式是,noexcept
可以引入真值背景,但是又如何另一个 noexcept 是一个参数?
有人可以详细说明这种noexcept
使用的语法和语义吗?
答案 0 :(得分:9)
使用:
template<class T, size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
(1) (2)
答案 1 :(得分:5)
关键字noexcept
可以在两种情况下使用:
noexcept
operator将表达式作为参数并返回bool
,指示表达式是否为非抛出。noexcept
specifier。此表单可选地采用一个bool
常量表达式来确定函数是否为noexcept
。在您粘贴的代码中,
noexcept ( noexcept(swap(*a, *b)))
^^^^^^^^ ^^^^^^^^
specifier operator