C++编译器实现命名空间
答
正如你指出的,名字改编的故事(但理由这样做有更多的是有接头,而不是编译器)的一部分。
但是,就编译器中的名称空间处理而言,名称修改远非全部。除此之外,编译器必须能够找出不合格的名称,这可能是不平凡的:请参阅argument-dependent lookup。
答
从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
还有什么办法? :)毕竟,它是*名字* -space。 – Xion 2011-06-09 10:03:27
是的。问题是什么? – Christopher 2011-06-09 10:03:58