1.所有頭文件都應該使用#define 防止頭文件被多重包含,命名格式可以參考<PROJECT>_<PATH>_<FILE>_H
2.使用前置聲明盡量減少.h文件中#include的數量,導致不必要的重新編譯
3.函數參數:輸入參數在前,輸出參數在後。輸入參數一般傳值或常數引用,輸出參數或輸入輸出參數為非常數指針。
4. .cpp頭文件包含順序
同名頭文件
C系統文件
C++系統文件
其它庫頭文件
本項目內其它頭文件
5.命名空間
(1)分為有名和無名的命名空間
(2)不能在命名空間的定義中聲明子命名空間,不能在命名空間外使用"命名空間::子命名空間{}"的形式為子命名空間添加新成員。
a. namespace A
{
namespace B; //error
}
b. namespaceA{}
A::B{}; //error
namespaceA{
namespace B{} //right
}
(3)using指令和using聲明
using指令:using namespace A; //整個命名空間中的所有成員都可直接使用
using聲明:using A::成員名 //只聲明特定的成員
(4)一般來說,使用using聲明會更安全。因為,using聲明只導入指定的名稱,如果該名稱與局部名稱發生沖突,編譯器會報錯。而using指令導入整個命名空間中的所有成員的名稱,包括那些可能根本用不到的名稱,如果其中有名稱與局部名稱發生沖突,則編譯器並不會發出任何警告信息,而只是用局部名去自動覆蓋命名空間中的同名成員。特別是命名空間的開放性,使得一個命名空間的成員,可能分散在多個地方,程序員難以准確知道,別人到底為該命名空間添加了哪些名稱。
(5)可以為命名空間定義別名
namespace 別名 = 命名空間名; //方便使用
6.局部變量
提倡在盡可能小的作用域中聲明變量,離第一次使用越近越好,在聲明變量時將其初始化
7.類中成員聲明次序
(1)public,protected,private
(2)typedefs和enums
常量
構造函數
析構函數
成員函數
數據成員
8.使用C++的類型轉換代替C語言的類型轉換
(1)static_cast:和C風格轉換相似可做值的強制轉換,或者指針的子類到父類的明確的向上轉換
(2)const_cast:移除const屬性
(3)reinterpret_cast:指針類型和整形,或者其他指針間不安全的轉換,僅在你對你所做的一切了然於心時使用
(4)dynamic_cast:運行時類型檢查,指針的父類到子類的轉換
9.使用前置自增代替後置自增,後置自增要多一次拷貝
10.盡可能多的使用const