5

我真的不清楚为什么有人会将特定形式的初始化命名为“值初始化”。听起来好像是通过给它一个值来初始化对象……但这就是初始化通常所做的,并且名称并没有告诉您它将用于初始化的值。

4

1 回答 1

7

Boost value_init 的文章提供了一个相当详细的值初始化历史,它最终出现在缺陷报告 178 的标准中:更多关于值初始化,并且该术语似乎起源于缺陷报告 35:默认初始化的定义。尽管这些文件都没有真正提供该术语的正确来源,但它确实提供了一些好主意,但它说:

C++ 标准 (TC1) 的第一个技术勘误,其草案于 2001 年 11 月向公众发布,引入了核心问题 178(当然还有许多其他问题)。

该问题引入了值初始化的新概念(它还修复了零初始化的措辞)。非正式地,值初始化类似于默认初始化,除了在某些情况下非静态数据成员和基类子对象也进行值初始化。不同之处在于,值初始化的对象不会(或至少不太可能具有)数据成员和基类子对象的不确定值;与对象默认构造的情况不同。(有关规范性描述,请参阅核心问题 178)。

为了指定对象的值初始化,我们需要使用空集初始化器:()。

与default- initialization 相比,值初始化不太可能留下具有不确定值的对象。

于 2014-09-03T03:53:55.663 回答