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++则表示原先的值照样输出。