#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.