我试图理解没有,除非
。我开始知道全局交换函数通常是这样指定的
void swap (T& x, T& y) noexcept(noexcept(x.swap(y)))
{
x.swap(y);
}
我想了解为什么noexcept spec是noexcept(noexcept(x.swap(y)))而不是noexcept(x.swap(y)
)。
这是两种用法,除了
。
如果 x.swap(y
) 声明不抛出,则 noexcept(x.swap(y)) 中使用的 noexcept
运算符将返回 true
,否则返回 false
。
它可以在函数模板的 noexcept 说明符中用于声明函数将针对某些类型引发异常,但不会引发其他类型的异常。
noexcept 说明符用于指定函数是否可以引发异常。noexcept(noexcept(x.swap(y))
) 根据 noexcept(x.swap(y))
的结果指定是否交换
抛出;即交换
是否可以抛出取决于 x.swap(y)
是否可以抛出。