回答
這是合法的,您可以在同一個Translation Unit的任何地方使用Foo
。
匿名命名空間是說對變量static
其範圍限制在同一翻譯單位的標準所規定的方式。
C++ 03標準節7.3.1.1未命名空間
第2段:
使用static關鍵字的命名空間中的範圍聲明對象時已被棄用,無名的命名空間提供了一個更好的選擇
更新:
作爲@Matthieu M.正確地指出中的註釋和his answer的C++ 11標準從C++ 03標準,這意味着除去上述報價在命名空間範圍內聲明對象時不推薦使用static
關鍵字,但匿名或未命名的名稱空間仍然有效。
我的答案略有不同,但更正確一點,我認爲;) –
@BjörnPollex:啊,這是我的第二次編輯使我們的答案相同lol –
現在我們都添加了標準報價:) –
這是合法的。您可以在翻譯單元的任何地方參考Foo
。
從C++ 03標準,第7.3.1.1:
一個未命名的名稱空間定義的行爲就好像它是由
namespace unique { /* empty body */ } using namespace unique; namespace unique { namespace-body }
替換其中的
unique
所有出現 翻譯單元由相同的標識符替換和本 標識符從在整個程序中所有其他標識符不同。使用static關鍵字的在 一個命名空間聲明範圍的對象時不推薦使用; unnamed命名空間提供了一個優越的替代選項 。
'unnamed-namespace-definition的行爲就好像它被替換爲...' 。我懇求在這裏有所不同。如果沒有命名'namespace',你可以在裏面聲明/定義一個變量。但是,如果命名空間不正常(因爲它會導致多個符號鏈接器錯誤)。所以兩者都沒有相同的效果。 – iammilind
@iammilind:由於所有翻譯單元的「唯一」(這是該名稱空間的名稱)是不同的,因此永遠不會有多重定義的符號。此外,這是一個標準的引用,所以如果你不同意,請與委員會討論;) –
好吧,我認爲'unique'只是一個名字。我不知道標準委員會會把這種令人困惑的例子:))。可能是'命名空間
定義略微在C++ 11標準改變:
7.3.1.1未命名空間[命名空間。無名]
1/一個未命名的名稱空間定義的行爲就好像它是由
inlineoptnamespace unique { /* empty body */ }
using namespace unique ;
namespace unique { namespace-body }
其中內嵌出現替換當且僅當它出現在未命名-namespace-定義中,翻譯單元中唯一的所有事件被相同的標識符替代,並且該標識符不同於整個程序中的所有其他標識符.94 [例如:
namespace { int i; } // unique ::i
void f() { i++; } // unique ::i++
namespace A {
namespace {
int i; // A:: unique ::i
int j; // A:: unique ::j
}
void g() { i++; } // A:: unique ::i++
}
using namespace A;
void h() {
i++; // error: unique ::i or A:: unique ::i
A::i++; // A:: unique ::i
j++; // A:: unique ::j
}
末端示例]
- 1. 匿名命名空間
- 2. 從匿名命名空間調用命名命名空間中的函數
- 3. C++組合命名空間
- 4. 嵌套的匿名命名空間?
- 5. 命名空間內的匿名函數
- 6. 使用匿名。匿名的名稱空間函數。命名空間範圍
- 7. C++命名空間
- 8. 靜態和匿名命名空間
- 9. 聯動匿名命名空間內的符號的規則命名空間
- 10. 重命名命名空間
- 11. 全局命名空間中的命名空間C#
- 12. C#完全限定的命名空間與小命名空間
- 13. 命名空間
- 14. 命名空間
- 15. 命名空間
- 16. 命名空間
- 17. 命名空間
- 18. 是「使用命名空間」是指加載該命名空間
- 19. System.Collections是「System命名空間的命名空間」嗎?
- 20. XSD命名空間到C#命名空間
- 21. C++無名(匿名)命名空間定義
- 22. C++中的命名空間
- 23. C++中的命名空間
- 24. C#中的命名空間#
- 25. c中的命名空間#
- 26. c中的命名空間#
- 27. 導入命名空間無法找到命名空間
- 28. 命名空間和C++/C混合頭
- 29. 命名空間中不存在命名空間名稱'Notify'Twilio.Rest
- 30. 加入不同命名空間的命名空間房間
[在靜態具名命名空間的優勢的可能重複?](http://stackoverflow.com/questions/4422507/superiority-of- unnamed-namespace-over-static) – Nawaz
這是合法的,但意味着與常規名稱空間不同。 :) – jalf