C Operator Preference Table注意到()
的优先级更高。
代码:
# include <stdio.h>
int main()
{
int temp=2;
(temp += 23)++; //Statement 1
++(temp += 23); //Statement 2
printf("%d",temp);
return 0;
}
我的问题是,当括号中的优先级高于语句2中的预先修复运算符时,为什么会出现错误。 在声明1中,两者具有相同的优先级,但评估顺序是从左到右。还是一样的错误。 第三个疑问:operator + =优先级低得多,那么为什么会导致错误。
error: lvalue required as increment operand
答案 0 :(得分:6)
lvalue
是可以分配其他值的值(因为它位于赋值运算符的左侧)。 (temp += 23)
是rvalue
。没有任何东西可以分配给它。
答案 1 :(得分:2)
我想添加的其他内容是,您似乎在尝试在表达式中多次修改值。根据C99标准6.5(2),这是未定义的行为。
在上一个和下一个序列点之间,对象应具有其存储值 通过表达式的评估最多修改一次。此外,先前的价值 应该只读以确定要存储的值。
脚注71)显示了这个例子:
此段落呈现未定义的语句表达式,例如
i = ++i + 1; a[i++] = i;
允许
i = i + 1; a[i] = i;