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

use*_*108 6 c++ c++11

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

以下代码编译得很好gcc.

struct A
{
  A() = default;
};

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

int main()
{
  A a;
  B b;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

pmr*_*pmr 8

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

一个default声明的特殊成员函数将有一个noexcept取决于符noexcept的参与功能(其隐含noexcept符)符.如果明确指定noexcept编译,则如果与隐式noexcept说明符冲突,则应该失败.


jua*_*nza 5

可以默认构造函数抛出?

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

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

struct Bar
{
  Bar() = default;
  Foo f;
}
Run Code Online (Sandbox Code Playgroud)