C ++ ::不要混淆分配(=)与平等测试(==)
如果C++更像是BASIC,则下面的代码看起来很简单,并且可以正常编译和运行:
if (a = b) cout << "a is equal to b.";
因为这看起来很无辜,所以它会产生逻辑错误,除非您正在寻找它,否则在大型程序中需要花费数小时才能进行跟踪。(因此,当程序需要调试时,这是我要寻找的第一件事。)在C和C++中,以下内容不是对相等性的测试:
a = b
当然,这是将b的值分配给a,然后求值到所分配的值。
问题是a=b通常不会评估为合理的正确/错误条件-我将在稍后提到一个主要例外。但是在C和C++中,任何数值都可以用作“if”或“while”的条件。
假设a和b设置为0。前面显示的if语句的作用是将b的值放入a;中。则表达式a=b的值为0。值0等于false。因此,a和b相等,但是打印出的东西恰恰是错误的:
if (a = b) //此确保a和b相等... cout << "a and b are equal."; else cout << "a and b are not equal."; //但此图已打印!
当然,解决方案是在您需要时使用相等性测试。请注意使用双等号(==)。在条件内这是正确的。
//正确的版本: if (a == b) cout << "a and b are equal.";