C++以前置自增与后置自增

 

关于前置自增与后置自增的区别我是参考这里: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

get

3class

3thread

1

 

执行f(1)时,i 后置自增变为2,v 是静态变量,初始化为1。而后 i 前置自增变为3,v 被赋值为3;

执行f(0)时,因为v是静态变量,因此再也不执行初始化操做,而直接执行后续语句,即输出v,此时v=3。而后 i 前置自增变为1,v 被赋值为1。

相关文章
相关标签/搜索