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;
}
答案 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.