C++条件运算符输出结果不符合预期,求助问题排查
问题原因与解决方法
原因分析
问题核心是C++运算符优先级导致的解析错误:流插入运算符<<的优先级高于三目条件运算符?:。你代码中的这一行:
cout << "Conditional Operator (expect value 2): " << (d < 0)? -d : d;
会被编译器解析为:
(cout << "Conditional Operator (expect value 2): " << (d < 0)) ? -d : d;
由于d=-2 < 0,(d < 0)的结果是布尔值true,流插入操作会将true输出为1。而三目运算符计算出的正确结果2并未被插入输出流——因为整个表达式逻辑是先执行流插入,再判断流状态(流正常时为true),但这部分结果未被处理,所以你看到的1其实是(d < 0)的输出值。
解决方法
给整个三目条件运算表达式加上括号,强制让它优先计算后再参与流插入:
cout << "Conditional Operator (expect value 2): " << ((d < 0)? -d : d);
修改后,编译器会先计算((d < 0)? -d : d)得到预期的2,再将该值插入输出流,最终输出结果符合预期。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

