c++ - 无法理解 C++ 中预递增/预递减的工作原理

标签 c++ operators pre-increment

有人可以解释一下下面代码中发生了什么吗? (摘自 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;
 }

代码取自:http://www.geeksforgeeks.org/g-fact-40/

最佳答案

当你做的时候

++a = 20;

大致相当于

a = a + 1;
a = 20;

但是当你这样做的时候

a++ = 20;

大致等同于

int temp = a;
a = a + 1;
temp = 20;

但是变量 temp 并不真正存在。 a++ 的结果是一个叫做 rvalue 的东西,它们不能被赋值。右值应该位于赋值的右侧,而不是左侧。 (这基本上就是 lvaluervalue 中的 lr 的来源。)

参见例如this values category reference有关左值和右值的更多信息。

关于c++ - 无法理解 C++ 中预递增/预递减的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44880658/

相关文章:

c++ 无法创建带有标识符的对象

c++ - 读取文件直到空行

delphi - 如何检查子集是否包含在集合中?

c++ - 前增量和后增量

c++ - fscanf 不能正确处理字符串

c++ - 从文件中读取字符串。 QTextStream 不读取文件

c++ - VS2010 改变路径宏

c++ - 为什么我们不能接受输入并一步操作它?

c - 预递增运算符返回左值还是右值?

php - echo++$a + $a++ 的输出应该是什么