Ram*_*Yen 12 c++ initialization value-initialization default-initialization
我发现许多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。
这是一个例子:
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
}
Run Code Online (Sandbox Code Playgroud)
我猜上面在上面可以,但是在这里:
int value = 4; // is this considered a value-initialization?
Run Code Online (Sandbox Code Playgroud)
请帮助我了解两种初始化形式之间的主要区别。
A a;是默认初始化,因为默认构造函数A用于初始化。由于隐式生成的默认构造函数不A执行任何操作,a.x因此具有不确定的值。
A()是值初始化,
如果 T 是一个具有既不是用户提供的也不是删除的默认构造函数的类类型(也就是说,它可能是一个具有隐式定义或默认默认构造函数的类),则该对象为零初始化,然后它是默认的 -如果它有一个重要的默认构造函数,则进行初始化;
注意与默认初始化的区别,A有一个隐式定义的默认构造函数,并且对象是零初始化的;x所以临时对象的数据成员A()将被初始化为0。
A b = A();是复制初始化,概念上b是从临时对象初始化A(),所以b.x也会被初始化0。请注意,由于复制省略,C++17b保证直接进行值初始化;复制/移动结构被省略。
int value = 4;也是复制初始化。value将被初始化为4.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |