從C++編譯器的角度來看,命名空間只是一種名稱裝飾約定?我檢查了生成的程序集列表,發現除了標識符由命名空間的名稱裝飾以外,所有內容看起來都一樣。C++編譯器實現命名空間
2
A
回答
2
正如你指出的,名字改編的故事(但理由這樣做有更多的是有接頭,而不是編譯器)的一部分。
但是,就編譯器中的名稱空間處理而言,名稱修改遠非全部。除此之外,編譯器必須能夠找出不合格的名稱,這可能是不平凡的:請參閱argument-dependent lookup。
0
從C++編譯器的角度來看,命名空間只是一種名稱裝飾約定嗎?
我想是的。它只是最後的名字裝飾。
爲了做到這一點,編譯器做了很多事情。它在解析名稱時選擇正確的名稱空間(可能超出許多名稱空間)。
例如,
namespace X
{
void f(); //compiler chooses X only when decorating f()
namespace Y
{
void f(); //compiler chooses X and Y when decorating f()
void g() //compiler chooses X and Y when decorating g()
{
f(); //which f? Compiler decorates it with both X and Y.
X::f(); //which f? Compiler decorates it with X only.
}
}
}
+0
命名空間是否有某種範圍?你可能有兩個同名的類,但是這個名字空間可以防止碰撞。 – rcapote 2011-06-09 10:06:15
0
據我所知這就是它。可以在名稱修改中找到說明: http://en.wikipedia.org/wiki/Name_mangling
0
相關問題
- 1. 編譯命名空間錯誤?
- 2. 翻譯軌命名空間
- 3. 編譯與C++錯誤和命名空間
- 4. 有條件編譯整個命名空間 - C#
- 5. 編譯器抱怨所丟失的命名空間是類
- 6. 在命名空間內部或外部實現C++函數?
- 7. c編譯器在其命名空間中有一個功能(可能是?)。 mac
- 8. 實現C++概念的編譯器
- 9. C++命名空間....匿名命名空間是合法的?
- 10. 當從文件編譯彙編時發現命名空間錯誤
- 11. 如何定義命名空間以及編譯器如何處理命名空間?
- 12. 實體框架命名空間 - 上下文命名空間
- 13. C++編譯器無法找到函數(名稱空間相關)
- 14. 在C預編譯器中的實現之間切換
- 15. C#中的命名空間#
- 16. C++命名空間問題
- 17. XML命名空間,C#
- 18. C++命名空間trobles
- 19. C#DataSet命名空間
- 20. c中的命名空間#
- 21. C#命名空間搜索
- 22. C++宏和命名空間
- 23. C++組合命名空間
- 24. c中的命名空間#
- 25. C++ - 類與命名空間
- 26. C++命名空間幫助
- 27. C#命名空間指南
- 28. C++命名空間導出
- 29. C#命名空間問題
- 30. ANTLR v3 C#命名空間
還有什麼辦法? :)畢竟,它是*名字* -space。 – Xion 2011-06-09 10:03:27
是的。問題是什麼? – Christopher 2011-06-09 10:03:58