关于这个知识点的总结很早就想写啦,前缀++、后缀++是在笔试的时候频繁出现的。
以前对她的理解只是表面上的,从网上搜索到一个总结:
前缀++,是先加后赋值,
如 i = 1;
m = ++i;
最后 m 和 i 的值都是2。
后缀++,是先赋值后加,
如 i = 1;
m = i++;
最后 m 的值为 1, i 的值为 2。
在很长的时间里,这个总结是我解决这类问题的圣经,认为这两种++区别也就尽在此。
后来与到了一个++的问题发现用我以前的理解的圣经解决不了:
1) i++++;
2) ++i++;
对于第一个问题,不能编译通过,而却能第二问题能成功编译。
这不得不让我重新去认识++这个单目运算符!
运算符其实也是函数,前缀++与后缀++是两个不同的函数
前缀++的实现:自加之后返回自己, 这样前缀++的返回后的值是一个左值;
后缀++的实现:先把自己拷贝给一个临时变量,再自加,返回临时变量,这样后缀++的返回后的值是一个右值,不能进行赋值运算,离开后缀++本行后,临时变量就会被销毁。
(在C++里实现这两种++重载的时候,能很直观看出其区别)
所以 1) i++++; 是不能编译通过的, i++ 后返回一个临时变量,是右值, 在对右值的临时变量进行++,是不允许的。
2) ++i++; ++i 后返回的是自己,是一个左值,再进行++是没有问题的。
以上只是个人理解,如有错误,欢迎指出!