默认的默认构造函数由C++
编译器生成,用户无法控制它们。他们可以扔吗?在声明一个时可以指定noexcept
吗?
以下代码与gcc
编译良好。
struct A
{
A() = default;
};
struct B
{
B() noexcept = default;
};
int main()
{
A a;
B b;
return 0;
}
答案 0 :(得分:8)
允许向默认的特殊成员函数(默认构造函数,复制构造函数,赋值运算符等)添加noexcept
说明符。
default
声明的特殊成员函数将具有noexcept
说明符,具体取决于所涉及函数的noexcept
说明符(其隐式noexcept说明符)。如果明确指定noexcept
,如果与隐式noexcept
说明符发生冲突,则编译失败。
答案 1 :(得分:5)
可以默认构造函数抛出吗?
是的,他们可以。例如,如果类具有默认构造函数抛出的数据成员。
struct Foo
{
Foo() { /* throws */}
};
struct Bar
{
Bar() = default;
Foo f;
}