C++中连续==运算结果始终为0的问题求助
为什么连续使用==运算符的结果总是0?
C++中的相等运算符==是左结合的,这意味着连续的==运算会从左到右依次执行,和你预期的“三个值全部相等”的逻辑完全不同。
以你的第一段代码为例:
cout << "(2+2 == 2*2 == pow(2, 2)) == " << (2+2 == 2*2 == pow(2, 2)) << endl;
它的实际运算顺序是:
- 先计算
2+2 == 2*2:结果是true(4等于4),而C++中bool类型与数值交互时,true会被隐式转换为1(整数或浮点类型)。 - 接着用第一步的结果
1和pow(2,2)的返回值4.0比较:1 == 4.0的结果是false,对应输出0。
你后续尝试的类型转换版本,本质逻辑完全一致:
- 转int的版本:
(2+2 == 2*2)得到true(转成int是1),再和int(pow(2,2))的4比较,1 ==4为false,输出0。 - 转double的版本:
double(2+2) == double(2*2)得到true(转成double是1.0),再和pow(2,2)的4.0比较,1.0 ==4.0为false,输出0。
正确的写法
如果你想判断三个值是否全部相等,需要用逻辑与运算符&&连接两个独立的相等判断:
cout << "((2+2 == 2*2) && (2*2 == pow(2, 2))) == " << ((2+2 == 2*2) && (2*2 == pow(2, 2))) << endl;
这样会先判断前两个值相等,再判断后两个值相等,只有两者都为真时,整体结果才为真(输出1)。
内容的提问来源于stack exchange,提问作者SeriousN00b
相关产品推荐
相关产品推荐

