翻閱《C++ Primer中文版(第4版)》,裏面出現的for大多都是類似如下的循環:
- vector<int> ivec(10);
- for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) {
- ix = 1;
- }
從以上的代碼中,不由得讓人產生兩個疑問:
1、判斷條件爲什麼用'ix != ivec.size()'而不用'ix < ivec.size()'呢?
在書中的第82頁的解釋爲:C++程序員習慣於優先選用!=而不是<來編寫循環判斷條件。
2、爲什麼調用size成員函數而不提前保存它返回的值?
同樣,在書中的第82頁的解釋爲:這反映了一種良好的編程習慣,在C++中,有些數據類型(如vector)可以動態增長,而在循環中容易地增加新元素,如果確實增加了新元素的話,那麼測試提前保存的size值就會有問題。在C++函數中有些函數可以聲明爲內聯函數。編譯器遇到內聯函數時就會直接擴展相應代碼,而不是進行實際的函數調用。像size這樣的小庫函數幾乎都定義爲內聯函數,故每次循環過程中調用它的運行時代價是比較小的。