c++ - C++中内部链接的实际应用

标签 c++ linkage

这听起来像是 What is the point of internal linkage in C++ 的重复版本也许是。只有一篇文章包含一些看起来不像实际示例的代码。 C++ISO 草案说:

When a name has internal linkage, the entity it denotes can be referred to by names from other scopes in the same translation unit.

对我来说,这看起来是一个很好的准时定义,但我找不到任何合理的应用,例如:“看看这段代码,这里的内部链接对于实现它有很大的不同”。此外,根据上面提供的定义,看起来全局变量履行了内部链接职责。您能提供一些例子吗?

最佳答案

内部链接是遵守 One Definition Rule 的实用方法.

人们可能会发现需要用普通名称定义函数或对象,例如 sumtotalcollection 或任何一个其他常用术语,不止一次。在不同的翻译单元中,它们可能服务于不同的目的,特定于该特定翻译单元的特定目的。

如果仅存在外部链接,则必须确保相同的名称不会在不同的翻译单元中重复,即 little_sumbig_sum red_sum 等...在某些时候,这会变得非常旧,非常快。

内部链接解决了这个问题。和unnamed namespaces有效地导致整个类和模板的内部链接。使用未命名的命名空间:如果翻译单元需要自己的私有(private)小模板,并且具有实用名称“trampoline”,则可以安全地继续使用它,而不必担心违反 ODR。

关于c++ - C++中内部链接的实际应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69354129/

相关文章:

c++ - 如何push_back到子 vector ?

c++ - 在命名空间中包装消息常量

c++ - 指向具有外部链接的对象的指针作为非类型模板参数

c++ - "extern string-literal declaration"在函数范围内

c - 链接和静态函数混淆

c++ - 如果只需要在 .cpp 文件中声明函数,是否有必要在 .h 文件中声明函数?

c++ - vector 作为对象,push_back 错误 - "("标记之前的预期主表达式

c++ - 使用二叉搜索树查找数组中第k个最小的元素

c++ - sigaction : using "void (*sa_sigaction)(int, siginfo_t *, void *);"

c++ - "unregistered void cast"使用派生到基类的 boost 序列化