明确默认的构造函数和成员变量的初始化

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)

T.C*_*.C. 7

有两种可能的差异来源.

  1. X() = default;不是用户提供的.X() : m_y() {}是.前者可以是微不足道的 ; 后者永远不会是微不足道的.此外,如果X对象是值初始化的,它们的行为也会不同.

  2. 该组由执行的初始化X() = default;等同于的X() {},其缺省初始化 m_y.X() : m_y() {} 价值初始化 m_y.根据具体Y情况,这可能会有所不同.例如,如果Yint,则默认初始化将使其具有不确定的值,而值初始化将其设置为零.