具有类内初始化的默认默认构造函数的行为是什么?

voi*_*ter 8 c++ c++11

假设如下:

class foo
{
public:
  foo() = default;

private:
  std::string m_str = "Hello";
};
Run Code Online (Sandbox Code Playgroud)

我无法在cppreference.com或C++ 11草案中找到任何文档,它解释了默认构造函数在这里对m_str做了什么.我自然的假设是编译器足够聪明,m_str如果它已经在类中初始化,则不能在默认构造函数中初始化,但也许我错了.

谁能解释这里的初始化行为?任何保证还是未指明?

Ker*_* SB 12

这在[class.ctor]/5中定义明确并指定:

[...]隐式定义的默认构造函数执行该类的初始化集合,该集合将由用户编写的该类的默认构造函数执行,不包含ctor-initializer(12.6.2)和空复合语句.[...]

因此,默认构造函数执行与以下相同的操作:

foo() {}
Run Code Online (Sandbox Code Playgroud)

这反过来又适用于每个数据成员(参见[class.base.init]/8).

  • @ void.pointer他的意思是"我添加了该声明以改善我的帖子".另外一个空的复合语句只意味着你的构造函数在分配和初始化步骤之后什么也不做,初始化的类型(值/默认值/零......)取决于你如何创建你的实例而不是构造函数的代码:) (3认同)