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

Using ternary operator inside a condtional gives unexpected output

我试图了解三元运算是如何为我提供此输出的。我希望条件会在 true == false 评估为 false 但 return_value 的结果为真时立即短路在这段代码中。

#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) 然后我得到我期望的输出。

我是否误解了操作顺序?

操作的隐含顺序似乎是

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

而不是

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

声明的初始化

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

可以等价改写成

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

由于逻辑表达式的计算结果为 false,因此返回第三个(assignmeny-expression),即 true.

根据 C++ 语法,条件运算符的定义如下

conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression

还有这个表达式

true == false && true == false && false

是一个逻辑或表达式,它又在 C++ 语法中定义为

logical-or-expression:
    logical-and-expression
    logical-or-expression || logical-and-expression