我发现许多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。
这是一个例子:
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
的默认构造函数用于初始化。由于A
的implicitly-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 initialization。 value
将初始化为4
。
关于c++ - 默认初始化和值初始化之间的歧义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56782494/