默认初始化和值初始化之间的区别

Difference between default-initialize and value-initialize?

本文关键字:初始化 区别 之间 默认      更新时间:2023-10-16

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

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

所以我的问题是:

默认初始化和值初始化有什么区别?

我想通过一些例子来了解其中的区别。

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

默认初始化对象 T型表示:
— 如果 T 是非 POD 类类型 的默认构造函数 调用 T(初始化为 如果 T 没有可访问性,则格式不正确 默认构造函数(;
— 如果 T 是 数组类型,每个元素都是 默认初始化;
— 否则, 对象为零初始化。


对对象进行值初始化 T型表示:
— 如果 T 是类类型 (第9条(与用户声明 构造函数 (12.1(,然后是默认值 T 的构造函数称为(和 如果 T 具有 没有可访问的默认构造函数(;
— 如果 T 是没有 一个用户声明的构造函数,然后 每个非静态数据成员和 T 的基类分量是 值初始化;96(
— 如果 T 是 数组类型,则每个元素为 值初始化;
— 否则, 对象为零初始化

"default-initialise" 给它标准指定的默认值,这可能是垃圾

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