
下面的這些要點是對所有的C++程序員都適用的。我之所以說它們是最重要的,是因為這些要點中提到的是你通常在C++書中或網站上無法找到的。如:指向成員的指針,這是許多資料中都不愿提到的地方,也是經常出錯的地方,甚至是對一些高級的C++程序員也是如此。
這里的要點不僅僅是解釋怎樣寫出更好的代碼,更多的是展現出語言規則里面的東西。很顯然,它們對C++程序員來說是永久的好資料。我相信這一篇文章會使你收獲不小。
首先,我把一些由不同層次的C++程序員經常問的問題歸到一起。我驚奇的發現有很多是有經驗的程序員都還沒意識到 .h 符號是否還應該出現在標準頭文件中。
要點1: <iostream.h> 還是 <iostream>?
很多C++程序員還在使用<iostream.h>而不是用更新的標準的<iostream>庫。這兩者都有什么不同呢?首先,5年前我們就開始反對把.h符號繼續用在標準的頭文件中。繼續使用過時的規則可不是個好的方法。從功能性的角度來講,<iostream>包含了一系列模板化的I/O類,相反地<iostream.h>只僅僅是支持字符流。另外,輸入輸出流的C++標準規范接口在一些微妙的細節上都已改進,因此,<iostream>和<iostream.h>在接口和執行上都是不同的。最后,<iostream>的各組成都是以STL的形式聲明的,然而<iostream.h>的各組成都是聲明成全局型的。
因為這些實質上的不同,你不能在一個程序中混淆使用這兩個庫。做為一種習慣,在新的代碼中一般使用<iostream>,但如果你處理的是過去編寫的代碼,為了繼承可以用繼續用<iostream.h>舊保持代碼的一致性。
要點2:用引用傳遞參數時應注意的地方
在用引用傳遞參數時,最好把引用聲明為const類型。這樣做的好處是:告訴程序不能修改這個參數。在下面的這個例子中函數f()就是傳遞的引用:
void f(const int & i);
int main()
{
f(2); /* OK */
}
這個程序傳遞一個參數2給f()。在運行時,C++創建一個值為2的int類型的臨時變量,并傳遞它的引用給f().這個臨時變量和它的引用從f()被調用開始被創建并存在直到函數返回。返回時,就被馬上刪除。注意,如果我們不在引用前加上const限定詞,則函數f()可能會更改它參數的值,更可能會使程序產生意想不到的行為。所以,別忘了const。
這個要點也適用于用戶定義的對象。你可以給臨時對象也加上引用如果是const類型:
struct A{};
void f(const A& a);
新聞熱點
疑難解答