为什么 a<=20? b=10 : c=30;
给出左值错误?
error: lvalue required as left operand of assignment
是因为 b=10 和 c=30 是语句而不是表达式吗?
最佳答案
这是因为条件运算符的优先级高于赋值运算符,表达式被解释为
((a<=20)? (b=10) : c)=30;
条件运算符返回的不是左值(N1570 6.5.15,脚注 110),因此程序将发出编译错误。
您可以使用括号来克服这个优先级问题。
a<=20? (b=10) : (c=30);
使用普通的 if
语句应该更好,除非你有如下原因:
- 打代码高尔夫
- 试图让你的程序难以阅读
- 想要使用从表达式返回的内容
if (a <= 20) {
b = 10;
} else {
c = 30;
}
关于c - 需要左值作为赋值的左操作数 - 错误? : in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554014/