非成員、靜態成員、全域函式

盡量將非成員函式放在名稱空間中;少用完全的全域函式 (也就是說,不包含在任何名稱空間中)。 請不要把靜態函式包裝成一個類別。 類別的靜態成員一般來說應該要與類別的實例或者靜態資料有高度相關。

優點

非成員及靜態成員函式在某些狀況下很有用。 將非成員函式放在名稱空間中可以避免汙染全域的名稱空間。

缺點

非成員及靜態成員函式也許作為某個類別中的成員會更合理,特別是這些函式會存取一些外部資源或者有高度相關時。

我們的決定

有時候定義一個不受類別實例限制的函式很有用。 這樣的函式可以是非成員或者靜態成員函式。 非成員函式不應該依賴在某個外部變數上,而且應該放在某個名稱空間內。 不要特別為了一群函式建立一個類別,這與直接在函式前面加上前綴 (Prefix) 沒甚麼兩樣,而且這種包裝通常都不是必要的。

如果你定義了一個非成員函式,而且它只需要用在它所屬的 .cc 檔中,請使用 內部連結性 來限制它的作用域。