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
,则默认初始化将使其具有不确定的值,而值初始化将其设置为零.