2011-11-25 78 views
2

可能重複:
Superiority of unnamed namespace over static?
Why unnamed namespace is a「 superior」 alternative to static?爲什麼匿名命名空間首選靜態全局變量?

我知道知道匿名的命名空間是 「鼓勵」 了靜態全局這更像是C(和不建議使用),等等等等,我自己經常使用它們。然而,儘管已經閱讀了關於這個主題的其他文章和問題,但我還沒有真正看到明確的原因,爲什麼匿名命名空間比一組簡單的靜態全局變量更好。

爲什麼我應該堅持前者有一個明確的理由嗎?

+1

另請參閱:[爲什麼無名命名空間是靜態的「優越」選擇?](http://stackoverflow.com/questions/4977252/why-unnamed-namespace-is-a-superior-alternative-靜態) – Nawaz

+0

可能的重複:http://stackoverflow.com/q/4977252/187543 – cpx

+0

另外:http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions – Gnawme

回答

3

命名空間範圍內的靜態變量不再被棄用。

沒有什麼特別的理由可以選擇其中之一。選擇一個未命名的命名空間的一個小原因是你可以在其中聲明任何東西,而只有函數和變量可以是靜態的。選擇靜態聲明的一個小原因是你沒有額外的大括號在聲明周圍閒逛。使用任何一種讓你感覺更和諧的方法。

歷史筆記:在C++ 11之前,有一個理由更喜歡命名空間:出於一些奇怪的原因,指向static對象或函數的指針不能用作模板參數,而指向非static的指針可能會。 C++ 11刪除了這個限制,以及同樣奇怪的限制,例如阻止局部類型爲模板參數。

+0

不再是C++ x11嗎? – 8bitcartridge

+2

是的,C++ 11消除了棄用。 –

+0

無論如何,棄用是一個笑話! – curiousguy