[教程] c++变量初始化规则 : m" l4 ^1 A/ t, `, v在c++中,当定义没有初始化的变量时,系统有时候会帮我们初始化这些变量。这时,系统提供什么样的值取决于变量的类型,也取决于变量定义的位置。6 v; ^- Z; S% O, H( |( ?
4 n' o/ L9 h2 k$ [! n
1、内置类型变量的初始化 / m6 O0 e. |4 o( s* t! ^9 F" a- t, v
内置变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化为0,在函数体内定义的内置变量不进行自动初始化。 2 I2 Y8 w$ t; p5 [7 Y% ^ & B# l. V" B1 R9 {3 x, b. x" c2 D! J$ C除了用作赋值操作符的左操作数,未初始化的变量用作任何其他用途都是没有定义的,未初始化引起的错误难以发现。 9 w/ u" j& I u& q" U; `* I / ?; {' }! G! S2、类类型变量的初始化 ) \3 V. p( W5 M$ |1 v4 n- s ]* @! _% q, x4 F' C每个类都定义了该类型的对象可以怎样初始。类通过定义一个或多个构造函数来控制类对象的初始化。例如我们知道string类至少提供了两个构造函数,其中一个允许我们通过字符串字面值初始化string对象,另外一个允许通过字符和计数器初始化string对象。- p4 R9 V7 E* r+ c: C! ]4 M
/ K: K9 w* u$ o7 ~6 W$ Y如果某个类的变量时没有提供初始式,这个类也可以定义初始化时的操作数。它通过定义一个特殊的构造函数,即默认构造函数来实现。这个够战术之所以成为默认构造函数,是因为它是“默认运行”的。如果没有提供初始化式,那么就会使用默认构造函数。不管类变量在哪里定义,默认构造函数都会并使用。6 r f* l R2 E
1 y2 V- t. [; Z; F& y; s; n, g; _大多数类都提供了默认构造函数。如果类具有默认构造函数,那么就可以在定义该类的变量时不用显示的初始化变量。例如,string类定义默认构造函数来初始化string变量为空字符串,即没有字符的字符串。 9 S" @. Q6 D8 M& c5 u