默认情况下是继承构造函数noexcept(true)吗?

时间:2016-03-03 22:32:47

标签: c++ c++11 constructor noexcept inheriting-constructors

Here我发现:

  

默认情况下,继承构造函数[...]都是noexcept(true),除非它们需要调用noexcept(false)函数,在这种情况下这些函数是noexcept(false)。

这是否意味着在以下示例中,继承的构造函数是noexcept(true),即使它已在基类中明确定义为noexcept(false),或者它本身也被视为 a函数是noexcept(false)要调用吗?

struct Base {
    Base() noexcept(false) { }
};

struct Derived: public Base {
    using Base::Base;
};

int main() {
    Derived d;
}

1 个答案:

答案 0 :(得分:4)

继承的构造函数也将是noexcept(false),因为你引用的是一个继承的构造函数,默认为noexcept(true)

  

除非他们需要调用noexcept(false)

的函数

Derived构造函数运行时,它还会调用Base构造函数noexcept(false),因此,Derived构造函数也将是noexcept(false)。< / p>

以下证明了这一点。

#include <iostream>

struct Base {
  Base() noexcept(false) { }
};

struct Derived: public Base {
  using Base::Base;
};

int main() {
  std::cout << noexcept(Derived());
}

输出0.