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

时间:2011-04-10 08:33:02

标签: c++ initialization

  

可能重复:
  What do the following phrases mean in C++: zero-, default- and value-initialization?

我正在阅读this answer,所以我遇到了第二个字:value-initialize。最初我认为这与default-initialize相同,但上下文暗示我错了。

所以我的问题是:

default-initialize value-initialize 之间有什么区别?

我想了解一些例子的区别。

2 个答案:

答案 0 :(得分:10)

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

  

默认初始化一个对象   T型表示:
   - 如果T是非POD   class类型的默认构造函数   调用T(初始化为   如果T无法进入,则形成不良   默认构造函数);
   - 如果T是   数组类型,每个元素都是   默认初始化;
   - 否则,   对象是零初始化。


  

value-initialize 一个对象   T型表示:
   - 如果T是类类型   (第9条)用户声明   构造函数(12.1),然后是默认值   调用T的构造函数(和   如果T有,则初始化是不正确的   没有可访问的默认构造函数);
   -   如果T是非联合类类型而没有   然后是用户声明的构造函数   每个非静态数据成员和   T的基类组件是   值初始化; 96)
   - 如果T是   数组类型,然后每个元素   值初始化;
   - 否则,   对象是零初始化

答案 1 :(得分:7)

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

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