关于noexcept参数

时间:2014-12-27 09:32:09

标签: c++ c++11 c++14

使用noexcept对我来说非常清楚,因为现代优化的标记功能的方法是无抛出异常保证

struct A {
    A() noexcept; 
}; 

有效的现代c ++ 第14项中,我发现了以下语法,称为有条件noexcept

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

我得到它的方式是,noexcept可以引入真值背景,但是又如何另一个 noexcept 是一个参数?

有人可以详细说明这种noexcept使用的语法和语义吗?

2 个答案:

答案 0 :(得分:9)

使用:

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

答案 1 :(得分:5)

关键字noexcept可以在两种情况下使用:

  1. noexcept operator将表达式作为参数并返回bool,指示表达式是否为非抛出。
  2. 用于指定函数是否抛出的noexcept specifier。此表单可选地采用一个bool常量表达式来确定函数是否为noexcept
  3. 在您粘贴的代码中,

    noexcept    ( noexcept(swap(*a, *b)))
    ^^^^^^^^      ^^^^^^^^
    specifier     operator