被a++和++a搞晕乎乎的童鞋们可以进来下啊~哈哈,顶顶~
之前很多朋友都问了我这个问题,处于方便,我就一次这个帖子解答了吧。。。其实很简单,因为每一个表达式都有一个返回值。比如c++或者++c。这些都是一个表达式,而自增(或者自减)运算符的位置的不同,表达式的返回类型就不同。
前置的运算符返回的是对该对象的一个引用。就是说,返回的是一个地址,所以可以做连续运算,比如++++c这样的表达式是合法的。
但是后置运算法不一样。他返回的只是一个临时副本,就是说,返回的只是一个值而并没有一个修改权限(可以把它理解成为一个constant的值)
所以说c++++这样的表达式是不合法的,一般用的gcc或者vc编译器都会报错的吧。而且准确的说,后置运算符++是一个二元运算符。第一个参数是你做操作的对象本身,第二个参数实际上是编译器自动传入的一个int,而且这个值一般为0。就是说c++这个表达式的完整形式应该是 operator ++(int c,int),第二个参数实际上没有什么用处,只是为了和前置运算符区分以便重载而已。
总之,明白了前置返回的是引用而后置返回的是值的话,其实很好理解了。
这就是为什么a=(++c)+(++c);c=0;最后的a=4而不是3或者2或者别的什么答案了。你们明白咯吗