C++ 显式默认构造函数和成员变量的初始化
我对显式默认一个ctor时会发生什么有点困惑 下面的两个代码示例是否等效 要使用第一个选项,C++ 显式默认构造函数和成员变量的初始化,c++,c++11,constructor,default-constructor,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; }; 有相同的。有了明确的首席技术官,你只能强制执行他的创作。否则,如果不使用默认构造函数,编译器可以避免创建它。创建共享库时可能会很有趣。 参考有
Y
是否有任何限制
class X
{
public:
X() = default;
private:
Y m_y;
};
class X
{
public:
X() : m_y() {}
private:
Y m_y;
};
有相同的。有了明确的首席技术官,你只能强制执行他的创作。否则,如果不使用默认构造函数,编译器可以避免创建它。创建共享库时可能会很有趣。
参考有两种可能的差异来源
X()=默认值代码>不是用户提供的<代码>X():m_y(){}
是。前者可能微不足道;后者绝不是微不足道的。此外,如果初始化了X
对象的值,它们的行为也会有所不同X()=默认值执行的初始化集
相当于X(){}
,它默认初始化m_y
X():m_y(){}
值初始化m_y
。根据Y
是什么,这可能会有所不同。例如,如果Y
为int
,则默认初始化将保留不确定值,而值初始化将其设置为零一些细节必须依赖于实现,比如ints的零初始化。。。但严格来说,默认值与其他两个构造函数相同。尽管如此,我认为需要引入默认值,以便让编译器在生成它时进行选择。如果默认值不存在,编译器将被迫生成构造函数,即使没有使用。这就是关键。