i++ 与 ++i
今天做项目,其余时候学习了操作符重载。
学习操作符重载的时候,比较清晰地理解了前后自增自减的区别与本质。之前学习C的时候,受到误导,一直以为前自增的优先级高,返回加1的值,后自增的优先级比较低,返回原来的值,在下次调用时是加1的值。
先做了个*p++和*++p的试验。
得出结论,前自增与后自增的优先级都高于解引用。
之前看到的一个问题: int x = *p++**++p 求x的值。
++的优先级高于解引用,高于乘法,所以*p++**++p = (*(p++)) * (*(++p))。如果笔试中遇到这样的题目,冷静分析拆解,应该不是问题。
最后总结下前后自增减的区别:
1. 执行完前后自增和后自增,操作数都发生变化。++i 相当于删除原来的i,这个i是全新的 。i++之后i的值相当在原来i上加1.
这也是叫c++不叫++c原因吗?
2. 表达式的值:++i的值是运算以后的值,是左值,可以继续被赋值。i++的值是运算以前i的副本,是右值,不可以被赋值。