为什么noexcept两次用于全局交换功能

Why noexcept is used twice for global swap function

我正在努力理解 noexcept。我开始知道全局交换函数通常是这样指定的

void swap (T& x, T& y) noexcept(noexcept(x.swap(y)))
{
   x.swap(y);
}

我想了解为什么 noexcept 规范是 noexcept(noexcept(x.swap(y))) 而不是 noexcept(x.swap(y))

这是noexcept的两种用法。

如果 x.swap(y) 声明不抛出,noexcept(x.swap(y)) 中使用的 noexcept operator 将 return true,否则 false

It can be used within a function template's noexcept specifier to declare that the function will throw exceptions for some types but not others.

noexcept specifier 用于指定函数是否可以抛出异常。 noexcept(noexcept(x.swap(y)))根据noexcept(x.swap(y))的结果指定swap是否抛出;即 swap 是否可以抛出取决于 x.swap(y) 是否可以抛出。