i++ 与 ++i

  今天做项目,其余时候学习了操作符重载。

  学习操作符重载的时候,比较清晰地理解了前后自增自减的区别与本质。之前学习C的时候,受到误导,一直以为前自增的优先级高,返回加1的值,后自增的优先级比较低,返回原来的值,在下次调用时是加1的值。

 

  先做了个*p++和*++p的试验。

i++ 与 ++i

  得出结论,前自增与后自增的优先级都高于解引用。

  之前看到的一个问题: int x = *p++**++p   求x的值。

i++ 与 ++i

++的优先级高于解引用,高于乘法,所以*p++**++p = (*(p++)) * (*(++p))。如果笔试中遇到这样的题目,冷静分析拆解,应该不是问题。

 

  最后总结下前后自增减的区别:

1. 执行完前后自增和后自增,操作数都发生变化。++i 相当于删除原来的i,这个i是全新的 。i++之后i的值相当在原来i上加1.

  这也是叫c++不叫++c原因吗?

2. 表达式的值:++i的值是运算以后的值,是左值,可以继续被赋值。i++的值是运算以前i的副本,是右值,不可以被赋值。