例如,
template<class T,size_t N>
void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a,*b)));
在什么条件下函数可以或不能抛出异常?
答案 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}}语义。