C++编译器实现命名空间
C++ Compiler Implementing Namespace
从C++编译器的角度来看,名称空间只是一种名称装饰约定吗?我检查了生成的程序集列表,发现除了标识符由名称空间的名称修饰外,所有东西看起来都一样。
正如您所指出的,名称篡改是故事的一部分(但这样做的原因更多地与链接器而非编译器有关)。
然而,就编译器中名称空间的处理而言,名称篡改远不是全部。除其他外,编译器必须能够找出不合格的名称,这可能是不平凡的:请参阅参数相关查找。
据我所知,这就是它。描述可以在名称mangling下找到:http://en.wikipedia.org/wiki/Name_mangling
从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.
}
}
}
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- 模板实现文件中的匿名命名空间
- 在命名空间内部还是外部实现 c++ 函数?
- 在实现文件中,我们应该更喜欢"using namespace"指令还是将实现包装在命名空间 { } 中?
- 我们可以使用命名空间实现封装吗?
- 如何在两个不同的命名空间(但只写一次)中使用相同的标头定义,命名空间有不同的实现?
- 如何在类中实现可选择的类似命名空间的功能?
- 扩展命名空间 std 以在使用 C++11 时实现make_unique
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 在模板实现文件中使用命名空间
- 我应该在实现文件中使用未命名的命名空间吗
- 如何实现Casts实用程序命名空间
- 在C++中使用#define宏可以从不同的命名空间中选择实现
- 当在全局命名空间中覆盖new/delete时,我应该使用std-rtl中的new/delete的默认实现
- c++类实现命名空间
- C++编译器实现命名空间
- 在实现匿名命名空间中声明的函数时,未定义的引用链接器错误
- 友元函数在类中实现,在全局命名空间中调用