2.1.5 陷阱:未初始化的变量
除非程序为变量赋值,否则变量不包含有意义的值。例如,如果变量minimum_number既没有放在一个赋值语句的左侧而被赋值,也没有通过其他手段来赋值(比如用cin语句赋一个由用户输入的值),以下语句就是错误的:
- desired_number = minimum_number + 10;
这是由于minimum_number不包含有意义的值,所以等号右侧的整个表达式也不会产生有意义的值。如果变量(比如minimum_number)未被赋值,就说它未初始化。事实上,这比minimum_number不包含任何值还要糟糕。未初始化的变量(比如minimum_number)将包含一些"垃圾值"。未初始化的变量的值由留在其内存位置中的0,1序列来决定(可能是由用过该内存位置的上一个程序留下的)。因此,如果程序运行两次,未初始化的变量每次都可能获得不同的值。只要程序为完全相同的输入数据产生了两个不同的输出,而且程序本身未进行任何修改,就应该怀疑其中含有未初始化的变量。
为了避免出现未初始化的变量,一个办法是在声明变量的同时初始化。这可以通过添加一个等号和一个值来完成,如下所示:
- int minimum_number = 3;
它除了将minimum_number声明为int类型的变量,还将minimum_number的值设为3。像这样在同一行声明并初始化时,可以使用涉及运算(比如加法或乘法运算)的一个更复杂的表达式。然而,最常见的还是使用简单的常量来初始化。可在一个声明内列出多个变量,同时初始化其中的部分或全部变量,或者一个都不初始化。例如,以下语句声明了三个变量,但只初始化其中两个:- double rate = 0.07, time, balance = 0.0;
C++(www.cppentry.com)允许采用另一种方式在声明变量的同时初始化它。以下语句等价于刚才的声明:- double rate(0.07), time, balance(0.0);
具体是在声明的同时初始化,还是以后再初始化,要取决于实际情况。你选择的方式应该使程序更容易阅读。
在声明中初始化变量
可在声明变量的同时初始化它(向它赋值)。
语法
- Type _Name Variable _Name_1 = Expression _for_Value_1,
- Variable _Name_2 = Expression _for_Value_2, . . .;
示例- int count = 0, limit = 10, fudge_factor = 2;
- double distance = 999.99;
在声明变量的同时对它进行初始化的另一种方式:
- Type_Name Variable_Name_1(Expression_for_Value_1),
- Variable_Name_2(Expression_for_Value_2), . . .;
示例- int count(0), limit(10), fudge_factor(2);
- double distance(999.99);