假设如下:
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).