提问者:小点点

为什么 noexcept 用于全局交换函数两次 [重复]


我试图理解没有,除非。我开始知道全局交换函数通常是这样指定的

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))。


共1个答案

匿名用户

这是两种用法,除了

如果 x.swap(y) 声明不抛出,则 noexcept(x.swap(y)) 中使用的 noexcept 运算符将返回 true,否则返回 false

它可以在函数模板的 noexcept 说明符中用于声明函数将针对某些类型引发异常,但不会引发其他类型的异常。

noexcept 说明符用于指定函数是否可以引发异常。noexcept(noexcept(x.swap(y))) 根据 noexcept(x.swap(y)) 的结果指定是否交换抛出;即交换是否可以抛出取决于 x.swap(y) 是否可以抛出。