可以默认默认构造函数抛出?

时间:2014-02-09 14:02:47

标签: c++ c++11

默认的默认构造函数由C++编译器生成,用户无法控制它们。他们可以扔吗?在声明一个时可以指定noexcept吗?

以下代码与gcc编译良好。

struct A
{
  A() = default;
};

struct B
{
  B() noexcept = default;
};

int main()
{
  A a;
  B b;

  return 0;
}

2 个答案:

答案 0 :(得分:8)

允许向默认的特殊成员函数(默认构造函数,复制构造函数,赋值运算符等)添加noexcept说明符。

default声明的特殊成员函数将具有noexcept说明符,具体取决于所涉及函数的noexcept说明符(其隐式noexcept说明符)。如果明确指定noexcept,如果与隐式noexcept说明符发生冲突,则编译失败。

答案 1 :(得分:5)

  

可以默认构造函数抛出吗?

是的,他们可以。例如,如果类具有默认构造函数抛出的数据成员。

struct Foo
{
  Foo() { /* throws */} 
};

struct Bar
{
  Bar() = default;
  Foo f;
}