如果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.";