这听起来像是 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 的实用方法.
人们可能会发现需要用普通名称定义函数或对象,例如 sum
、total
、collection
或任何一个其他常用术语,不止一次。在不同的翻译单元中,它们可能服务于不同的目的,特定于该特定翻译单元的特定目的。
如果仅存在外部链接,则必须确保相同的名称不会在不同的翻译单元中重复,即 little_sum
、big_sum
、 red_sum
等...在某些时候,这会变得非常旧,非常快。
内部链接解决了这个问题。和unnamed namespaces有效地导致整个类和模板的内部链接。使用未命名的命名空间:如果翻译单元需要自己的私有(private)小模板,并且具有实用名称“trampoline”,则可以安全地继续使用它,而不必担心违反 ODR。
关于c++ - C++中内部链接的实际应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69354129/