第一條就是: const原則:在C++中最好趨向與使用const來(lái)修飾它前面的那個(gè)類型。 如:const int a;和int const b;中,雖然兩種具有相同的意義,但是最好利用后面的那種情況,后面的更加可讀,因?yàn)椋篿nt const我們可以很清楚地看到const是修飾int,而前面的那種方法中,我們就不那么輕易知道到底const 的具體涵義。由后面的那種方法我們可以知道const指一個(gè)恒定的整形。Int *const b,指的是一個(gè)恒定的指針b,這個(gè)指針指向一個(gè)整型,所以這個(gè)指針的內(nèi)容可以改變,但是它的指針值也就是b的值不能變,相應(yīng)的int const *b,指的是一個(gè)指向恒定整型內(nèi)容的指針b,也就是說(shuō)這個(gè)b的內(nèi)容可以變,但是開始的b所指向的地址中的內(nèi)容不能在程序當(dāng)中通過(guò)b來(lái)改變。volatile對(duì)上面的原則也適用。使用類型T做為類型變量已經(jīng)作為了模板參數(shù)的慣例,用來(lái)表示函數(shù)或者類所接受的類型參量可以用所有的類型。在C++的模板的類型參量前,最好盡量使用typename來(lái)代替class。在編譯時(shí)期,模板被編譯兩次;實(shí)例化之前:檢查模板代碼本身,查看語(yǔ)法是否正確;在實(shí)例化期間,檢查模板代碼,查看是否所有的調(diào)用都有效。當(dāng)使用函數(shù)模板,并且引發(fā)模板實(shí)例化的時(shí)候,編譯器需要查看模板定義。在函數(shù)實(shí)參的類型的推導(dǎo)中,如果類型出現(xiàn)不匹配現(xiàn)象則會(huì)出現(xiàn)編譯錯(cuò)誤。如果要解決這編譯錯(cuò)誤則有以下幾種方法解決:對(duì)傳入的實(shí)參進(jìn)行類型轉(zhuǎn)換成匹配類型后傳入。顯示指定模板函數(shù)的全特化(不能為偏特化,因?yàn)楹瘮?shù)不支持偏特化)類型。例子如下所示:
在模板函數(shù)內(nèi)部不能指定默認(rèn)的模板參數(shù)。函數(shù)不能采用偏特化的方法來(lái)實(shí)現(xiàn)類型的遞歸,但是它可以利用函數(shù)重載的方法來(lái)實(shí)現(xiàn)類型的轉(zhuǎn)換。相對(duì)于8而言類能使用偏特化的方法來(lái)實(shí)現(xiàn)類型的遞歸,并且它的仿函數(shù)也可以使用重載operator()來(lái)實(shí)現(xiàn)函數(shù)重載方法。但是它的一個(gè)問(wèn)題就是在調(diào)用仿函數(shù)的時(shí)候一定要加上它的實(shí)例化參數(shù)類型,以及調(diào)用它的構(gòu)造函數(shù)。函數(shù)調(diào)用的時(shí)候可以采用由參數(shù)的類型來(lái)反推函數(shù)的模板參數(shù),這是仿函數(shù)所不能的。所以我們?cè)诰幊痰倪^(guò)程當(dāng)中一定要注意這些不同技術(shù)之間的優(yōu)點(diǎn)和不足,看看哪些更適合我們。在調(diào)用非標(biāo)準(zhǔn)函數(shù)的時(shí)候最好要與調(diào)用標(biāo)準(zhǔn)函數(shù)區(qū)分開來(lái),這樣不致于使用程序產(chǎn)生歧義的錯(cuò)誤。做法是:在變量或者函數(shù)的前面加上全局標(biāo)識(shí)符::。