2011年(17)
分类: C/C++
2011-07-11 13:37:31
今天读一段代码想到一个有趣的问题。为什么自加操作符的优先级大于 =(包括构造),而用后加操作符赋值后的变量却是自增前得值呢?
int i =0;
int c =i++; //c=0;
int fid =0;
Feature *feature = new Feature(fid++); //feature->fid() ==0;
看上面的几行代码, 编译器如何做到先执行了自增操作,赋值变量增加,而被赋值变量却没有被自增操作影响呢?
答案在于自加操作符的操作符三个字上,操作符可以被认为是一个函数,我们执行自加操作之后自加变量的值确实变了,但是该操作符的返回值却未必。对于前加操作它的行为与我们的预期一样,但是对于后加它却仍然返回自加前的变量值。这就从操作符这个角度的确能很好的理解自加操作变量的这种行为和实现原理。