在条件中使用三元运算符会产生意外的输出
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
我试图了解三元运算是如何为我提供此输出的。我希望条件会在 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