如何评估noexcept()运算符的结果

时间:2015-11-29 18:43:15

标签: c++ noexcept

例如,

template<class T,size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a,*b)));

在什么条件下函数可以或不能抛出异常?

2 个答案:

答案 0 :(得分:2)

noexcept(noexcept(swap(*a,*b)))

外部的是noexcept specifier,内部的是noexcept operator

noexcept,如果swap的{​​{1}}为T

它是,它只能抛出,如果交换可以抛出。

答案 1 :(得分:2)

快速解释:

如果函数noexcept标记为true

内部swap(T&, T&)会返回noexcept

如果内部noexcept返回true,则外部noexcept会将此函数标记为noexcept

因此,此函数复制noexcept的{​​{1}}语义。