我一直在長時間使用static
關鍵字來定義內部鏈接。後來,我轉向使用匿名命名空間封裝本地事物的C++風格。匿名命名空間:他們真的很棒嗎?
但是,現在當我使用匿名命名空間多年的時候,我開始認爲static
關鍵字更易於使用!
一個常見的問題是,我有這樣的模式:
namespace {
// ...five pages of code...
} // namespace
要查看某個函數內部或外部的聯繫,我現在必須滾動了很多,而不是舊的C風格,我可以檢查前面的功能/對象是否有static
。
我知道有一些事情匿名命名空間可以做到這一點static
不能隱藏typedefs - 但個人而言,我並不是真的對此非常感興趣。
你對此有何看法?匿名命名空間的勝利是否值得降低可讀性?或者我都出錯了?
命名空間範圍內的`static`函數已被棄用,這是不使用它們的充分理由。 anon命名空間中的函數具有`static`的所有優點,除了它們具有外部鏈接。後者我認爲已經由編譯器處理,從導出的部分中刪除匿名命名空間中定義的名稱。 – 2010-12-22 21:58:04
@實際上,靜態函數永遠不會被棄用。棄用僅針對* objects *。但是,在n3225中已經取消了棄用:在C++ 0x中,不再推薦使用它來爲對象或函數提供內部鏈接。另一個區別是未命名的名稱空間會保留外部鏈接:未命名的名稱空間及其內容將在C++ 0x中獲得內部鏈接。所以在static-way和namespace-way之間似乎沒有任何區別,除了namespace-way將允許諸如`namespace {int a; } int a;`。 – 2010-12-22 22:09:27