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

时间:2015-04-15 09:34:56

标签: c++ c++11 constructor default-constructor

我对ctor被明确违约时会发生什么感到有些困惑。

这两个代码示例是否等效?

Y是否有任何限制可以使用第一个选项?

class X
{
public:
    X() = default;

private:
    Y m_y;
};

class X
{
public:
    X() : m_y() {}

private:
    Y m_y;
};

2 个答案:

答案 0 :(得分:7)

有两种可能的差异来源。

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

  2. X() = default;执行的初始化集等同于X() {}的初始化集,其中默认初始化 m_yX() : m_y() {} value-initializes m_y。根据{{​​1}}的不同,这可能会有所不同。例如,如果YY,则默认初始化将使其具有不确定的值,而值初始化将其设置为零。

答案 1 :(得分:0)

有相同的。通过明确的cto&rs; rs,你只能强制执行他的创作。否则,如果您没有使用默认构造函数,编译器可以避免创建它。创建共享库时可能很有趣。 供参考http://en.cppreference.com/w/cpp/language/default_constructor