我是 C 新手,今天我学会了“?”运算符是 if-else 语句的短类型。但是,当我执行这段代码时:
int b;
int x;
b=3<2?x=12:x=34;
我收到错误“错误:需要左值作为赋值的左操作数”。我不明白为什么会这样。我的想法是,程序首先将34赋给x,然后将x的值(即34)赋给b。
另一方面,我可以使用该语句
int b;
int x;
b=3<2?x=12:(x=34);
没有任何错误。我查看了我的书,但没有任何帮助。为什么我不能使用第一个语句?我的电脑想做什么?
谢谢...
+1 有趣的问题 - 它强调了 C++ 和 C 之间的两个区别。
(1) C和C++中三元表达式的求值规则不同
C++解析如下
logical-OR-expression ? expression : assignment-expression
因此,它通过匹配来解析您的语句assignment-expression
to x=34
b = 3<2 ? x = 12 : (x = 34);
但是C是这样解析的
logical-OR-expression ? expression : conditional-expression
x = 34
不是一个conditional-expression
所以你的语句被解析为
b = (3<2 ? x = 12 : x) = 34;
(2) C++中的条件运算符可以返回一个lvalue
,而 C 不能。因此,以下内容在 C++ 中合法,但在 C 中不合法:
b = (3<2 ? x = 12 : x) = 34;
在 ideone.com 上针对 C 和 C++ 编译器进行了验证。
另请参阅这些链接在c中使用三元运算符的错误C 和 C++ 三元运算符之间的差异C 和 C++ 之间的条件运算符差异对于左值规则中的差异
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)