假设以下内容:
class foo
{
public:
foo() = default;
private:
std::string m_str = "Hello";
};
我无法在cppreference.com或C ++ 11草案上找到任何说明默认构造函数对m_str起作用的文档。我自然的假设是,如果编译器m_str
已经在类中进行了初始化,则其编译器足够聪明,不会在默认的构造函数中进行初始化,但也许我错了。
谁能在这里解释初始化行为?有没有保证或未指定?
在[class.ctor] / 5中对此进行了很好的定义和指定:
[...]隐式定义的默认构造函数执行该类的初始化集,该初始化集将由该类的用户编写的默认构造函数执行,而没有ctor-initializer(12.6.2)和空的复合语句。[...]
因此,默认构造函数执行与以下操作相同的操作:
foo() {}
反过来,这会将括号或相等的初始化程序适当地应用于每个数据成员(请参阅[class.base.init] / 8)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句