Mag*_*ero 2 c++ initialization language-lawyer
以下陈述是否正确?
它们基于[dcl.init.general/6](粗体强调我的):
对类型的对象或引用进行零初始化
T意味着:
- 如果是标量类型,则该对象被初始化为通过将整数文字(零)转换为;
T获得的值。0T- 如果
T是(可能是 cv 限定的)非联合类类型,则其填充位初始化为零位,并且每个非静态数据成员、每个非虚拟基类子对象,并且如果该对象不是基类子对象,每个虚拟基类子对象都是零初始化的;- 如果
T是(可能是 cv 限定的)联合类型,则其填充位被初始化为零位,并且对象的第一个非静态命名数据成员被零初始化;- 如果
T是数组类型,则每个元素都初始化为零;- 如果
T是引用类型,则不执行初始化。
以及[dcl.init.general/7](粗体强调我的):
默认初始化类型的对象
T意味着:
- 如果
T是(可能是 cv 限定的)类类型 ([class]),则考虑构造函数。枚举适用的构造函数 ([over.match.ctor]),并通过重载决策 ([over.match]) 选择最适合初始化器的构造函数。()使用空参数列表调用如此选择的构造函数来初始化对象。- 如果
T是数组类型,则每个元素都默认初始化。- 否则,不执行初始化。
以下陈述是否正确?
不,你是在颠覆他们的逻辑联系。
“零初始化”和“默认初始化”的定义指定了标准中其他内容表示“对象是零初始化”的含义。当标准这么说时,您可以使用零初始化的定义来了解它的含义。作为参考,这意味着没有完成初始化。因此零初始化的引用是未初始化的(因此格式错误)。
但这并不意味着相反。未初始化的引用不是零初始化的。这是一个谬误: https: //en.wikipedia.org/wiki/Affirming_the_consequent
当标准规定执行零初始化时,引用被零初始化。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |