任何人都可以解释为什么这行代码错了吗?
int n = 0, y = 1;
y == 1 ? n = 0 : n = 1;
"Lvalue required as left operand of assignment "
"n=1"
答案 0 :(得分:2)
声明
(y == 1 ? n = 0 : n) = 1;
被解释为因为n
与?:
运算符绑定,因为它具有更高的优先级
=
需要l值作为其左操作数,而?:
返回r值
试试这个
y == 1 ? n = 0 : (n = 1);
或
n = y == 1 ? 0 : 1;
答案 1 :(得分:1)
您应该使用:
n = y==1 ? 0 :1
根据C标准,如果尝试将条件运算符的结果用作左值,则行为未定义。
答案 2 :(得分:0)
您可以使用三元运算符进行分配,例如:
int n = 0, y = 1;
n = y == 1 ? 0 : 1;