我发现许多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。

这是一个例子:

class A{
   public:
      int x;
};


int main(){
    A a;// default initialization so x has undefined value.
    A b = A(); // value initialization so x is a scalar thus it is value initialized to 0

}

我猜上面在上面是可以的,但是在这里:
int value = 4; // is this considered a value-initialization?

请帮助我了解两种形式的初始化之间的主要区别。

最佳答案

A a;default initialization,因为A的默认构造函数用于初始化。由于Aimplicitly-generated default constructor不执行任何操作,因此a.x具有不确定的值。
A()value initialization



注意与default initialization的区别,A有一个隐式定义的默认构造函数,而对象是zero-initialized;因此临时对象x的数据成员A()将初始化为0
A b = A();copy initialization,从概念上来说b是从临时对象A()初始化的,因此b.x也将被初始化为0。注意,由于copy elision,由于C++ 17 b可以保证直接是value-initialized;因此,复制/移动构造被省略。
int value = 4;也是copy initializationvalue将初始化为4

关于c++ - 默认初始化和值初始化之间的歧义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56782494/

10-11 23:01
查看更多