有人可以解释一下下面代码中发生了什么吗? (摘自 GeeksForGeeks)
int main(){
int a = 10;
++a = 20; // works
printf("a = %d", a);
getchar();
return 0;
}
执行语句++a = 20 时到底发生了什么?另外,请说明为什么这段代码执行失败?
int main(){
int a = 10;
a++ = 20; // error
printf("a = %d", a);
getchar();
return 0;
}
最佳答案
当你做的时候
++a = 20;
大致相当于
a = a + 1;
a = 20;
但是当你这样做的时候
a++ = 20;
它大致等同于
int temp = a;
a = a + 1;
temp = 20;
但是变量 temp
并不真正存在。 a++
的结果是一个叫做 rvalue 的东西,它们不能被赋值。右值应该位于赋值的右侧,而不是左侧。 (这基本上就是 lvalue
和 rvalue
中的 l
和 r
的来源。)
参见例如this values category reference有关左值和右值的更多信息。
关于c++ - 无法理解 C++ 中预递增/预递减的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44880658/