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

sky*_*ack 5 c++ constructor noexcept c++11 inheriting-constructors

在这里我发现:

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

这是否意味着在下面的示例中,继承的构造函数是noexcept(true),即使它已经noexcept(false)在基类中显式定义,或者它被认为是一个函数是noexcept(false)被调用?

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

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

int main() {
    Derived d;
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*amp 4

继承的构造函数也将是因为正如您引用的那样,默认情况下noexcept(false)继承的构造函数将是noexcept(true)

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

Derived构造函数运行时,它也会调用Base构造函数noexcept(false),因此,Derived构造函数也将是noexcept(false)

以下证明了这一点。

#include <iostream>

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

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

int main() {
  std::cout << noexcept(Derived());
}
Run Code Online (Sandbox Code Playgroud)

输出 0。