5

在这里我发现:

继承构造函数 [...] 默认情况下都是 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;
}
4

1 回答 1

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());
}

输出 0。

于 2016-03-03T22:52:43.050 回答