关于前置自增与后置自增的区别我是参考这里:http://bbs.bccn.net/thread-454977-1-1.htmlhtml
简单复述下,好比++x; 与 x++;spa
在C中,++x这个表达式的值为原先x的值+1,反作用是x的值增长了1;(C++中不是这样定义的,无论它)
在C中,x++这个表达式的值为原先x的值,反作用是x的值增长了1。
即记住几个词 表达式、表达式求值、反作用.net
C++ primer:自增运算符必须做用于左值对象,前置版本将对象自己做为左值返回,后置版本则将对象原始值的副本做为右值返回。code
建议:除非必须,不然不用递增递减运算符的后置版本(须要将原始值存储下来,增长了额外工做量)。htm
一道笔试中作过的题(涉及变量的静态存储):对象
void f(int i) { static int v=i++; cout<<v<<endl; v=++i; cout<<v<<endl; }
f(1);
f(0);
运行后输出:blog
1 get
3class
3thread
1
执行f(1)时,i 后置自增变为2,v 是静态变量,初始化为1。而后 i 前置自增变为3,v 被赋值为3;
执行f(0)时,因为v是静态变量,因此再也不执行初始化操做,而直接执行后续语句,即输出v,此时v=3。而后 i 前置自增变为1,v 被赋值为1。