我对ctor被明确违约时会发生什么感到有些困惑。
这两个代码示例是否等效?
Y
是否有任何限制可以使用第一个选项?
class X
{
public:
X() = default;
private:
Y m_y;
};
class X
{
public:
X() : m_y() {}
private:
Y m_y;
};
答案 0 :(得分:7)
有两种可能的差异来源。
X() = default;
不是用户提供的。 X() : m_y() {}
是。前者可以琐碎;后者永远不会是微不足道的。此外,如果对X
对象进行了值初始化,它们的行为也会有所不同。
由X() = default;
执行的初始化集等同于X() {}
的初始化集,其中默认初始化 m_y
。 X() : m_y() {}
value-initializes m_y
。根据{{1}}的不同,这可能会有所不同。例如,如果Y
为Y
,则默认初始化将使其具有不确定的值,而值初始化将其设置为零。
答案 1 :(得分:0)
有相同的。通过明确的cto&rs; rs,你只能强制执行他的创作。否则,如果您没有使用默认构造函数,编译器可以避免创建它。创建共享库时可能很有趣。 供参考http://en.cppreference.com/w/cpp/language/default_constructor