c - += 在 Visual C 中必须是左值

标签 c operators comparison-operators

谁能告诉我为什么

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/

相关文章:

c - *(void **) &(int[2]){0,PAGE_SIZE};意义?

objective-c - 问号和冒号(? : ternary operator) mean in objective-c?

python - 在python中使用in运算符搜索列表时使用什么算法?

r - 为 Date 类创建一个新的加法运算符

python - 为什么以及何时像 Python 中的 `==` 这样的文字比较运算符使用自定义类型而不是内置类型的魔术方法?

C# 可空相等操作,为什么 null <= null 解析为 false?

c - 使用数组保存和打印数据时遇到问题

c - C 中的字母数字字符串生成

c - 使用 DeviceIoControl 从应用程序向驱动程序发送数据

c - 为什么 while (1 < a < 5) 是一个无限循环?