外部联动的缺点

时间:2012-05-17 12:20:03

标签: c++

使用带有外部链接的符号(除了全局命名空间杂乱/冲突之外)是否有任何缺点?例如,我认为如果我有一个我永远不会调用的函数,如果它有内部链接,编译器可以放弃它,但如果它是外部的,编译器必须保留该代码,因为有人可能会在以后链接它。它是否正确?还有其他缺点吗?

我在问,因为我知道建议使用未命名的命名空间而不是静态关键字,但由于未命名的命名空间中的符号仍然具有外部链接,因此它们会遇到上述缺点(如果我是对的),等等并不像标准所说的那样完全胜过静态函数。

1 个答案:

答案 0 :(得分:2)

未命名的命名空间中的函数具有外部链接的事实几乎完全是技术性的。因为它们具有“秘密”翻译单元依赖的唯一标识符,所以不可能从不同的翻译单元命名它们。这意味着编译器可以假定它们永远不会通过其他翻译单元的名称调用。我所知道的大多数实现都将未命名的命名空间中的函数转换为局部符号而不是全局符号,就像具有真正内部链接的函数一样。

未命名的命名空间中的函数可以在不影响程序的情况下被丢弃,如果它从未从定义它的转换单元调用它并且它从未将其地址取出并传递出翻译单元,这可能导致它除了是一个直接命名的函数调用之外的其他函数。