C++Primer在132頁的提示中說:除非必須,否則不用遞增遞減運算符的後置版本 ...
C++Primer在132頁的提示中說:除非必須,否則不用遞增遞減運算符的後置版本
很多教材都詳細解釋了遞增遞減運算符前置與後置的區別,我對他們的理解是:前置修改後直接賦值,而後置是先修改到臨時變數,然後再賦值
下麵的這份代碼,第一個for迴圈使用後置版本,第二個使用前置版本,觀察在實際使用中這兩種樣式的區別
for(int i=0;i<10;i++) cout<<i<<" "; cout<<endl; for(int i=0;i<10;++i) cout<<i<<" "; cout<<endl;
運行結果:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
輸出結果完全相同,難道C++Primer在強行灌輸作者的代碼風格?
我們再來看一下下麵這幾行代碼:
int i = 0,j = 0; cout<<i++<<" "<<++j<<endl; cout<<i<<" "<<j;
運行結果:
0 1 1 1
現在意識到問題所在了麽?上面提到了兩種樣式的工作方式,我們把他們寫成偽代碼,前置是i=i+1,而後置則是tmp=i+1,i=tmp
後置需要進行兩倍於前置的操作次數,當然,也要消耗兩倍的時間