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

关于前置自增与后置自增的区别我是参考这里:http://bbs.bccn.net/thread-454977-1-1.html

简单复述下,比如++x; 与 x++;

 在C中,++x这个表达式的值为原先x的值+1,副作用是x的值增加了1;(C++中不是这样定义的,不管它)
 在C中,x++这个表达式的值为原先x的值,副作用是x的值增加了1。
即记住几个词 表达式表达式求值副作用

C++ primer:自增运算符必须作用于左值对象,前置版本将对象本身作为左值返回,后置版本则将对象原始值的副本作为右值返回。

建议:除非必须,否则不用递增递减运算符的后置版本(需要将原始值存储下来,增加了额外工作量)。

一道笔试中做过的题(涉及变量的静态存储):

void f(int i)
{
    static int v=i++;
    cout<<v<<endl;
    v=++i;
    cout<<v<<endl;
}  

f(1);
f(0);

运行后输出:

3

3

1

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

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

原文地址:https://www.cnblogs.com/Tang-tangt/p/10190599.html