我发现很多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。
下面是一个例子:
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?请帮助我理解这两种初始化形式的主要区别。
发布于 2019-06-27 01:22:38
A a;是默认初始化,因为A的默认构造函数用于初始化。由于隐式生成的默认构造函数 of A什么也不做,所以a.x具有不定值。
A()是值初始化,
如果T是一个类类型,它的默认构造函数既不是用户提供的,也不是删除的(也就是说,它可以是一个具有隐式定义的或默认的默认构造函数的类),那么对象是零初始化,如果它有一个非平凡的默认构造函数,那么它就是默认初始化;
注意与默认初始化不同的是,A有一个隐式定义的默认构造函数,对象是零初始化;因此,临时对象A()的data x将初始化为0。
A b = A();是复制初始化,在概念上,b是从临时对象A()初始化的,因此b.x也将初始化为0。请注意,由于复制省略,因为C++17 b保证直接为值初始化;所以省略了复制/移动构造。
int value = 4;也是复制初始化。value将初始化为4。
https://stackoverflow.com/questions/56782494
复制相似问题