C++前置操作与后置操作

最近在看C++ primer,看到书的中间部分,发现自己对先前的前置与后置操作理解的还不是很深刻。刚谷歌搜了一下,发现大家看的最多的那个链接讲的也不是很清楚,至少在我这个小白看来,不是很清楚。

这边为自己和大家理一理思路吧。

 

我们以例子来说明:

片段一:

int main(){
    int x = 0;
    int j = 0;

     for ( ; x < 10; ++x)
         cout << x << endl;
     for ( ; j < 10; j++)
         cout << j << endl;
}

以上这段代码的中的x,j的输出结果是一样的。

为:0123456789(以换行符相隔)。

接着,

片段二:

int main()
{
    int x = 0;
    int j = 0;
    for (; x < 10;)        
          cout << x++ << endl;
}

上边这段代码的输出结果也为0123456789

而,

片段三:

int main()
{
    int x = 0;
    int j = 0;
    for (; x < 10;)       
          //cout << x++ << endl;
          cout << ++x << endl;
}

这段代码的输出结果为12345679以及10

 

为什么会造成这种不同,这里我的理解为左值与右值的差异。

当以左值输出的时候,两者输出结果无差异,只是性能上会有点优劣,如书中所说前置操作返回原值加上一以后的值;而后置操作则还要保存初始值,然后再做加一操作。

当以右值输出时,结果会有差异,既前置不返回原值,后置返回原值。

片段一,x与j均以左值输出。

片段二&三,x与j以右值输出。

 

在objective-c里面

return ++c 意味着先执行操作一遍 c = c + 1 后再返回的c。而c++则表示原先的值照样输出。

 

posted @ 2012-07-20 16:48  sayALittle  阅读(274)  评论(0编辑  收藏  举报
点击这里给我发消息