在条件中使用三元运算符会产生意外的输出

问题描述 投票:0回答:1

我试图了解三元操作在做什么以提供给我这个输出。我希望条件条件一旦将[[true == false评估为false时就会短路,但是return_value的结果在此代码中为true。

#include <iostream> int main() { bool return_value = true == false && true == false && false ? (true == false) : true; // add parens to see expected output (false ? (true == false) : true); std::cout << std::boolalpha << return_value << std::endl; // expected output: false // actual output : true } }
如果我将括号放在最后一个条件

(false?(true == false):true)

,那么我会得到期望的输出。是否有我误解的操作顺序?
c++ operator-precedence conditional-operator ternary
1个回答
3
投票
似乎操作的隐式顺序是

bool return_value = (true == false && true == false && false) ? (true == false) : true;

而不是

bool return_value = true == false && true == false && (false ? (true == false) : true);

© www.soinside.com 2019 - 2024. All rights reserved.