+ =必须是Visual C中的l值

dan*_*own 1 c operators comparison-operators

有人可以向我解释原因

iterator += 1;
Run Code Online (Sandbox Code Playgroud)

工作但是

(isexpression < toexpression) ? iterator += byexpression : iterator -= byexpression;
Run Code Online (Sandbox Code Playgroud)

是否在ANSI C中,在visual studio中编写和编译?

我收到以下错误:错误C2106:'+ =':左操作数必须是l值

谢谢,

丹尼

hac*_*cks 5

这是因为编译器会解释

(isexpression < toexpression) ? iterator += byexpression : iterator -= byexpression;
Run Code Online (Sandbox Code Playgroud)

((isexpression < toexpression) ? iterator += byexpression : iterator) -= byexpression;  
Run Code Online (Sandbox Code Playgroud)

因为三元条件运算符 的运算符优先级?:高于-=或者+=.因此,子表达式iterator被绑定?:而不是-=.-=运算符的左侧必须是l值,但?:运算符永远不会产生l值,这就是您得到错误的原因

error C2106: '+=' : left operand must be l-value    
Run Code Online (Sandbox Code Playgroud)

永远记住括号是你的朋友.您可以通过将其括起来来删除此错误

(isexpression < toexpression) ? (iterator += byexpression) : (iterator -= byexpression);  
Run Code Online (Sandbox Code Playgroud)