关于i++ = 100 编译错误,而++i = 100编译通过

379 阅读1分钟
#include <iostream>
using namespace std;
 
int main()
{
    int i = 3;
    //++i = 100;
    i++ = 100;
    cout << i << endl;
    return 0;
}

如上例,gcc环境下,i++编译出错,而++i = 100; 最后输出即为100;解释如下:

首先对于i++的实现是:

int temp = i;
i = i + 1;
return temp;

而++i的实现是:

i = i + 1;
return i;

i++ = 100; 是错误的,是因为i++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值),而++i是正确的,因为返回的就是i,有具体地址可引用。

这也就可以得出:int i = 3; cout << (++i)++ << endl; 得到的结果是4.
因为++i返回i,为4,而i++返回的i的临时等值变量,还是4.