我试着理解三元运算是怎么给我这个输出的。我希望条件会在真==错误求值为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
} }如果我把括号放在最后一个条件(假?(true == false):true)然后得到我期望的输出。
有我误解的操作顺序吗?
发布于 2020-02-05 18:27:17
似乎隐含的操作顺序是
bool return_value = (true == false && true == false && false)
? (true == false)
: true;而不是
bool return_value = true == false &&
true == false &&
(false ? (true == false) : true);发布于 2020-02-05 18:39:00
声明的初始化
bool return_value = true == false &&
true == false &&
false ? (true == false) : true;可以等效地重写如下
bool return_value = ( true == false && true == false && false ) ? (true == false)
: true;作为逻辑表达式的结果,计算结果为false,然后返回第三个(转让人-表达式),即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-expressionhttps://stackoverflow.com/questions/60081917
复制相似问题