default-initialize和value-initialize之间的区别?

Naw*_*waz 14 c++ initialization

可能重复:
C++中的以下短语是什么意思:零,默认和值初始化?

我正在读这个答案,所以我遇到了第二个字:value-initialize.最初我认为这是相同的,default-initialize但上下文暗示我错了.

所以我的问题是:

default-initializevalue-initialize有什么区别?

我想了解一些例子的不同之处.

Kar*_*oor 10

根据标准(8.5/4,5):

缺省初始化类型T的对象是指:
-如果T是一个非POD类类型T的默认构造函数被调用(和是形成不良的初始化如果T没有可访问的缺省的构造);
- 如果T是数组类型,则每个元素都是默认初始化的;
- 否则,对象被零初始化.


值初始化类型的物体T是指:
-如果T是一个类型(第9节)与用户声明的构造(12.1),然后对T中的默认构造函数被调用(以及初始化是形成不良的如果T没有可访问的默认构造函数);
- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的; 96)
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,对象被零初始化

  • 警告:这个答案对于 C++11 来说已经过时了。请参阅http://stackoverflow.com/q/22233148/368896。在 C++11 中,对于“默认初始化”情况,“-- 否则,该对象将被零初始化”被替换为“-- 否则,不执行初始化”。 (2认同)

Ben*_*ott 7

"default-initialise"为其提供标准指定的默认值,该值可能是垃圾.

"value-initialise"将其初始化为特定值 - 例如,在构造函数中设置一个值,或者由编译器优化.