ksl*_*ksl 3 c++ constructor default-constructor c++11
我对ctor明确违约时会发生什么感到困惑.
这两个代码示例是否相同?
Y能够使用第一个选项是否有任何限制?
class X
{
public:
X() = default;
private:
Y m_y;
};
class X
{
public:
X() : m_y() {}
private:
Y m_y;
};
Run Code Online (Sandbox Code Playgroud)
有两种可能的差异来源.
X() = default;不是用户提供的.X() : m_y() {}是.前者可以是微不足道的 ; 后者永远不会是微不足道的.此外,如果X对象是值初始化的,它们的行为也会不同.
该组由执行的初始化X() = default;等同于的X() {},其缺省初始化 m_y.X() : m_y() {} 价值初始化 m_y.根据具体Y情况,这可能会有所不同.例如,如果Y是int,则默认初始化将使其具有不确定的值,而值初始化将其设置为零.