C++ 什么';递归noexcept()的含义是什么?
标准库为数组和C++ 什么';递归noexcept()的含义是什么?,c++,noexcept,C++,Noexcept,标准库为数组和std::pair定义了交换,如下所示: 模板 无效掉期(T&a)[N], T&b[N])无例外(无例外(掉期(*a,*b)); 模板 结构对{ … 无效掉期(配对和p)无例外(无例外(掉期(第一,p.first))&& 无例外(掉期(第二,p.second)); … }; 有效的现代C++项目14表示: […]它们是否为noexcept取决于noexcept子句中的表达式是否为noexcept 例如,给定两个Widget数组,仅当数组中的单个元素交换为noexcept时,交换它
std::pair
定义了交换,如下所示:
模板
无效掉期(T&a)[N],
T&b[N])无例外(无例外(掉期(*a,*b));
模板
结构对{
…
无效掉期(配对和p)无例外(无例外(掉期(第一,p.first))&&
无例外(掉期(第二,p.second));
…
};
<>有效的现代C++项目14表示:
[…]它们是否为noexcept
取决于noexcept
子句中的表达式是否为noexcept
例如,给定两个
Widget
数组,仅当数组中的单个元素交换为noexcept
时,交换它们才是noexcept
,即如果交换Widget
为noexcept
这反过来决定了其他交换,例如用于小部件
的数组的交换,是否是无例外
类似地,交换两个
std::pair
对象(包含Widget
s)是否为noexcept
取决于交换Widget
s是否为noexcept
但是从这个解释中,我无法理解为什么需要将调用嵌套为noexcept(noexcept(swap(*a,*b))
如果目标是“将两个数组交换为noexcept
交换元素”,为什么noexcept(swap(*a,*b))
不够
noexcept()
的这些不同重载是什么?这不是“递归的”noexcept
,noexcept
关键字有两种用法:
- -将函数标记为
,并可选地将布尔常量表达式作为参数noexcept
- -将表达式作为参数,并返回一个布尔常量表达式,表示表达式是否为
noexcept
就你而言:
// `noexcept` operator
// v~~~~~~~~~~~~~~~~~~~~~
noexcept(noexcept(swap(*a, *b)))
// ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// `noexcept` specifier
如果,我想应该将说明符重命名为
noexcept\u。