2. 做用域

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)若是須要定義一個靜態或全局類變量,考慮從主函數初始化一個非智能指針。

相關文章
相關標籤/搜索