2012-09-30 45 views
2

我在C++中遇到了this article on dynamic linking名称静态对象的绑定

我们可以创建一个C++工厂,它将返回我们感兴趣的类的对象。 另外,我们应该在工厂的文件范围内创建一个静态对象,以便使用dlsym()来定位它。 (该文章建议静态对象不会被名称损坏)。

为什么静态对象没有名称受损?

回答

5

名称mangling是为了帮助解决重载的函数名称而发明的。您可以定义几个具有相同名称的函数,只有计数和参数类型不同。通过名称修饰,链接器可以将这些功能解析到代码中的正确位置。

与函数的名称不同,全局名称空间中的静态对象的名称不能重载,因此不需要重新编译它们。事实上,全局名称空间之外的对象的名称已经被损坏。

+0

由于名称空间的原因,对象名称实际上可能会被损坏。然而,这个问题具体是关于文件范围(即全局名称空间)中的“静态”对象,在这种情况下,调整可能非常不方便。 – MSalters

+0

@MSalters非常感谢您的评论!我修正了答案,以澄清只有全局名称空间中的对象的名称没有被损坏。 – dasblinkenlight