1. 名稱空間函數
(1)利:名稱空間將全局做用域分紅獨立的子做用域,防止命名衝突。spa
(2)弊:名稱空間可能引發混亂,在頭文件中使用匿名名稱空間容易違反C++的一次性定義規則。指針
(3)名稱空間的內容不縮進,「//namespace」做爲結束。作用域
(4)匿名名稱空間的使用規則it
a. 在 .cpp 文件中,匿名名稱空間是容許甚至被鼓勵的;變量
b. 不在頭文件中使用匿名名稱空間;構造函數
(5)命名名稱空間的使用規則方法
a. 包括 #include 後的全部代碼;命名
b. 不在 std 名稱空間中聲明任何東西,是未肯定的行爲或不可移植的;文件
c. 在源文件,頭文件中的函數、方法、類中可使用 using 指令;
d. 名稱空間別名可在源文件、頭文件的全局名稱空間中,或函數和方法中任意使用;
e. 頭文件中的別名在全部包含它的文件中均可見,即公共頭文件中應避免定義別名;
2. 類嵌套
(1)利:嵌套類僅被外部類使用時,類嵌套能夠避免在外部定義類引發的做用域混亂。能夠前置聲明嵌套類,而將其實現放在源文件中,避免其定義出如今外部類的聲明中。
(2)弊:嵌套類僅能夠被前置聲明與外部類中,操做嵌套類的頭文件中,都必須包含外部類的所有聲明;
3. 外部函數、靜態成員函數、全局函數
(1)儘可能使用名稱空間內的外部函數,或靜態成員函數,儘可能少甚至不使用全局函數;
(2)若是必須定義一個只在其源文件內使用的外部函數,可使用匿名名稱空間,或靜態連接來限制其做用域;
4. 局部變量
(1)儘可能縮小函數內部變量的做用域,並在定義時初始化。
(2)若是變量是一個類,它的構造函數和析構函數在每次進入、退出做用域時,將被調用。
5. 靜態變量和全局變量
(1)類的靜態和全局使用時被禁止的,可能因爲不肯定的構造、析構次序而引發錯誤。
(2)不容許使用一個函數來初始化一個全局變量,除非這個函數不依賴任何其餘全局變量。
(3)若是須要定義一個靜態或全局類變量,考慮從主函數初始化一個非智能指針。