谁能告诉我为什么
iterator += 1;
有效但是
(isexpression < toexpression) ? iterator += byexpression : iterator -= byexpression;
不是在 ANSI C 中,在 visual studio 中编写和编译吗?
我收到以下错误:error C2106: '+=' : left operand must be l-value
谢谢,
丹尼
最佳答案
这是因为编译器解释
(isexpression < toexpression) ? iterator += byexpression : iterator -= byexpression;
作为
((isexpression < toexpression) ? iterator += byexpression : iterator) -= byexpression;
因为 operator precedence三元条件运算符 ?:
高于 -=
或 +=
。因此,子表达式 iterator
绑定(bind)到 ?:
而不是 -=
。 -=
运算符的左侧必须是左值,但 ?:
运算符永远不会产生左值,这就是您收到错误的原因
error C2106: '+=' : left operand must be l-value
永远记住括号是你的 friend 。您可以通过将其括起来作为
来消除此错误(isexpression < toexpression) ? (iterator += byexpression) : (iterator -= byexpression);
关于c - += 在 Visual C 中必须是左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20128139/