我找到了一段显示以下内容的代码:
int A = 4;
int Z;
Z = (A ? 55 : 3);
为什么Z的结果为55?
答案 0 :(得分:4)
您似乎对以下事实普遍存在误解:条件语句(if
,while
,...)和三元运算中的表达式必须“看起来像”条件,因此它们应包含关系/平等/逻辑运算符。
不是那样的。常用的关系/等式/ ...运算符与条件语句/表达式没有任何特殊关系;他们可以自己生活
bool foo = 5 > 4;
std::cout<<foo<<"\n"; // prints 1
和条件语句/表达式并不特别在意它们
if(5) std::cout << "hello\n"; // prints hello
if
/ ?
/ while
/ ...仅计算表达式,检查转换为bool
的结果是true
还是{ {1}},并采取相应措施。如果表达式不“看起来像”,则条件无关紧要,只要可以将结果转换为false
,就可以在条件中使用它。
现在,在这种特殊情况下,bool
的取值为4,不为零,因此当转换为A
时的取值为bool
,因此三元表达式的取值为第二个表达式,因此true
。