我正在阅读c ++标准,我遇到过该行(3.3.2 / 2):
int x=x;
在此示例中,x
使用自己的(Indeterminate)值进行初始化。在这种情况下,x
是否已初始化?
答案 0 :(得分:1)
如果您在VS中运行此代码且所有检查都已启用,则会出现运行时错误
运行时检查失败#3 - 正在使用变量'x'而未初始化。
初始化过程(粗略地)为对象赋值。当您使用对象本身时,您正在使用未初始化的内存来初始化内存
在初始化本身时,我建议使用第8.5章:
声明者可以为声明的标识符指定初始值。标识符指定要初始化的变量。 8.5的其余部分中描述的初始化过程也适用于由其他语法上下文指定的初始化,例如使用参数表达式(5.2.2)初始化函数参数或初始化返回值。 (...)
和12.6:
12.6初始化[class.init]
如果没有为(可能是cv限定的)类类型(或其数组)的对象指定初始化程序,或者初始化程序具有表单(),则按照8.5中的指定初始化对象。
可以显式初始化类类型(或其数组)的对象;见12.6.1和12.6.2。
- 醇>
当一个类对象数组被初始化(显式或隐式)并且元素由构造函数初始化时,应按照下标顺序为数组的每个元素调用构造函数;见8.3.4。 [注意:数组元素的析构函数按其构造的相反顺序调用。 - 尾注]
12.6.1 可以使用带括号的表达式列表初始化类类型的对象,其中表达式列表被解释为被调用以初始化对象的构造函数的参数列表。或者,可以使用=初始化形式将单个赋值表达式指定为初始化程序。直接初始化语义或复制初始化语义都适用;见8.5。 (...)