经过研究,我了解到递增运算符要求操作数有一个可修改的数据对象:https://en.wikipedia.org/wiki/Increment_and_decrement_operators.
由此,我猜测它会给出编译错误,因为(a+b)
是一个临时整数,因此不可修改.
这种理解正确吗?这是我第一次try 研究一个问题,所以如果有什么我应该找的,请建议.
经过研究,我了解到递增运算符要求操作数有一个可修改的数据对象:https://en.wikipedia.org/wiki/Increment_and_decrement_operators.
由此,我猜测它会给出编译错误,因为(a+b)
是一个临时整数,因此不可修改.
这种理解正确吗?这是我第一次try 研究一个问题,所以如果有什么我应该找的,请建议.
这只是一条规则,仅此而已,可能是为了(1)让编写C编译器变得更容易,(2)没有人说服C标准委员会放松它.
非正式地说,如果foo
出现在赋值表达式(如foo = bar
)的左侧,则只能写++foo
.既然你不会写a + b = bar
,你也不会写++(a + b)
.
没有真正的理由解释为什么a + b
不能产生一个++
可以操作的临时变量,其结果是表达式++(a + b)
的值.