頭文件引用
1、引入順序,先本cpp對應(yīng)的h文件>C標(biāo)準(zhǔn)庫>cpp標(biāo)準(zhǔn)庫>其他庫>自己項目的h文件;
2、系統(tǒng)庫使用<>,其他庫使用引號
3、使用pragma once;
文件組織順序
文件聲明注釋>include gards>引用的頭文件> 自定義類型聲明>函數(shù)聲明(一般函數(shù)、模板函數(shù))>內(nèi)聯(lián)函數(shù)
編碼規(guī)則
1、不應(yīng)輕易省略else,即使什么也不做也應(yīng)該保留后用注釋解釋do nothing
2、注意class與struct的區(qū)別:struct中一般沒有除了構(gòu)造器的方法
3、沒有復(fù)制意義的類應(yīng)該使用DISABLE_COPY_SIGN宏來禁止自動生成構(gòu)造函數(shù)
4、類必須顯示聲明出構(gòu)造函數(shù)
5、由于只有一個參數(shù)的構(gòu)造函數(shù)會被C++編譯器定義為隱形類型轉(zhuǎn)換方法,因此除了復(fù)制構(gòu)造函數(shù)只有一個參數(shù)的構(gòu)造函數(shù)必須聲明為explicit顯示構(gòu)造函數(shù),使得它不用于程序中需要通過此構(gòu)造函數(shù)進行"隱式"轉(zhuǎn)換的情況;
6、禁止由于想要復(fù)用一些方法將沒有『is-a』關(guān)系的類定義為繼承關(guān)系
謹慎overide一個不是虛函數(shù)的方法
7、不允許在h文件中使用using,如果有那么需要考慮系統(tǒng)設(shè)計上是不是解耦工作做的不好。
8、使用lamda表達式的時候不使用默認的補貨方式,且要注意生命周期的問題
9、使用智能指針時慎用auto_ptr
10、慎用沒有邊界檢查的strcpy、strcat、strdum、strintf的方法,且strncpy和strncat也在實現(xiàn)上有問題,缺少結(jié)束符;
11、不要用typedef 去定義結(jié)構(gòu)體
C++風(fēng)格的類型轉(zhuǎn)換
static_cast(常規(guī)沒有損失的類型轉(zhuǎn)換)、
dynamic_cast(基類與子類間的轉(zhuǎn)換)、
const_cast(向const轉(zhuǎn)換)、
reinterpret_cast(重新解讀這段內(nèi)存)
要使用上述四種方法做類型轉(zhuǎn)換,不要用默認的方式,加強可讀性,表達使用意圖。