可能重复:
What do the following phrases mean in C++: zero-, default- and value-initialization?
我正在阅读this answer,所以我遇到了第二个字:value-initialize
。最初我认为这与default-initialize
相同,但上下文暗示我错了。
所以我的问题是:
default-initialize 和 value-initialize 之间有什么区别?
我想了解一些例子的区别。
答案 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”将其初始化为特定值 - 例如,在构造函数中设置一个值,或者由编译器优化。