【发布时间】:2014-12-08 00:38:03
【问题描述】:
干杯。 - Alf 在answer 中评论说,与 C++98 相比,值初始化可以说是 C++03 的一个新特性。我想知道他的意思。
value initialization 是 C++98 的一部分吗?它是否存在于概念中但不在名称中?为什么将其添加到 C++03 标准中?
我有一份 '03 标准,但没有 '98 标准。这里是默认初始化和值初始化的定义。
默认初始化 T 类型的对象意味着:
——如果 T 是非 POD 类类型(第 9 条),则为 T 被调用(如果 T 没有 可访问的默认构造函数);
——如果 T 是一个数组类型,每个元素都是默认初始化的;
——否则,对象被零初始化。
对 T 类型的对象进行值初始化意味着:
——如果 T 是类类型 (第 9 条)使用用户声明的构造函数(12.1),然后是默认值 调用 T 的构造函数(如果 T 没有可访问的默认构造函数);
——如果 T 是非联合类 没有用户声明的构造函数的类型,然后是每个非静态数据 T 的成员和基类组件是值初始化的;
——如果 T 是 一个数组类型,那么每个元素都是值初始化的;
——否则, 对象是零初始化的
我的猜测是 '98 具有默认初始化但没有值初始化,并且两者之间存在一些关键区别。老实说,我在这里无法解析标准语,而且我不明白定义之间的区别。
【问题讨论】:
标签: c++ language-lawyer c++03 c++98 value-initialization