background image

6
1
7
1
8
1
9
2
0
2
1
2
2

注意,m_nValue 从未初始化过。结果就是,GetValue()返回的是一个垃圾值,
if 语句的两个分支都有可能会执行。

新手程序员通常在定义多个变量时会犯下面这种错误:

1int nValue1, nValue2 = 5;

这里的本意是 nValue1 和 nValue2 都被初始化为 5,但实际上只有 nValue2
被初始化了,nValue1 从未被初始化过。

由于未初始化的变量可能是任何值,因此会导致程序每次执行时呈现出不同
的行为,由未初始化变量而引发的问题是很难找到问题根源的。某次执行时,
程序可能工作正常,下一次再执行时,它可能会崩溃,而再下一次则可能产
生错误的输出。当你在调试器下运行程序时,定义的变量通常都被清零处理过
了。这意味着你的程序在调试器下可能每次都是工作正常的,但在发布版中可
能会间歇性的崩掉!如果你碰上了这种怪事,罪魁祸首常常都是未初始化的
变量。

2)整数除法

C++中的大多数二元操作都要求两个操作数是同一类型。如果操作数的不同类
型,其中一个操作数会提升到和另一个操作数相匹配的类型。在 C++中,除
法操作符可以被看做是 2 个不同的操作:其中一个操作于整数之上,另一个
是操作于浮点数之上。如果操作数是浮点数类型,除法操作将返回一个浮点数
的值:

1
2
3

float fX = 7; 
float fY = 2; 
float fValue = fX / fY; // fValue = 3.5

如果操作数是整数类型,除法操作将丢弃任何小数部分,并只返回整数部分。