无法理解C++中预增量/预减量的工作原理

Soh*_*dhi 1 c++ operators pre-increment

有人可以解释以下代码中发生的事情吗?(摘自GeeksForGeeks)

int main(){
 int a = 10;
 ++a = 20; // works
 printf("a = %d", a);
 getchar();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行语句++ a = 20时究竟发生了什么?另外,请澄清为什么此代码执行失败?

int main(){
    int a = 10;
    a++ = 20; // error 
    printf("a = %d", a);
    getchar();
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

代码来源:http://www.geeksforgeeks.org/g-fact-40/

Som*_*ude 8

当你这样做

++a = 20;
Run Code Online (Sandbox Code Playgroud)

它大致相当于

a = a + 1;
a = 20;
Run Code Online (Sandbox Code Playgroud)

但是,当你这样做

a++ = 20;
Run Code Online (Sandbox Code Playgroud)

大致相当于

int temp = a;
a = a + 1;
temp = 20;
Run Code Online (Sandbox Code Playgroud)

变量temp并不存在.结果a++是一个叫做右值的东西,那些不能分配给它们.Rvalues应该位于任务的右侧,而不是左侧.(这基本上是什么l,并rlvaluervalue得来的.)

有关左和右的更多信息,请参阅此值类别参考.