从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. C++ 17:对pmr命名空间类的编译器支持
- 2. 编译命名空间错误?
- 3. Java编译/包/命名空间错误
- 4. 实现命名空间函数javascript
- 5. 翻译轨命名空间
- 6. C++命名空间
- 7. 编译XSD到C#对象包括命名空间
- 8. 有条件编译整个命名空间 - C#
- 9. 编译与C++错误和命名空间
- 10. C++编译错误 - “命名空间标识中没有类型命名'函数'
- 11. 命名空间,类和编译器顺序
- 12. 编译器抱怨所丢失的命名空间是类
- 13. 在命名空间内部或外部实现C++函数?
- 14. 像compilr.com实现C#编译器(在线)
- 15. 实现C++概念的编译器
- 16. c编译器在其命名空间中有一个功能(可能是?)。 mac
- 17. C++命名空间....匿名命名空间是合法的?
- 18. 当从文件编译汇编时发现命名空间错误
- 19. 如何定义命名空间以及编译器如何处理命名空间?
- 20. C++编译器无法找到函数(名称空间相关)
- 21. 实体框架命名空间 - 上下文命名空间
- 22. 在C预编译器中的实现之间切换
- 23. C-命名空间部分
- 24. XML命名空间,C#
- 25. C++中的命名空间
- 26. C++中的命名空间
- 27. C#命名空间指南
- 28. C++命名空间帮助
- 29. C#中的命名空间#
- 30. c中的命名空间#
还有什么办法? :)毕竟,它是*名字* -space。 – Xion 2011-06-09 10:03:27
是的。问题是什么? – Christopher 2011-06-09 10:03:58