繁体   English   中英

为什么匿名名称空间中的函数/对象具有外部链接?

[英]Why do functions/objects inside anonymous namespace have external linkage?

为什么在匿名名称空间中定义的符号(函数和变量)不像static关键字那样具有内部链接? 如果某个功能在外部不可见/不可访问,那么建立外部链接的原因是什么?

在C ++ 03中,禁止将内部链接的名称用作模板参数[*]。 因此,未命名名称空间中大多数事物的名称具有外部链接,以允许它们与模板一起使用。 您可以通过将其声明为static来显式地在未命名的命名空间中提供名称内部链接,这与命名或全局命名空间相同。

两者都在C ++ 11中发生了变化-未命名的名称空间中的名称默认情况下具有内部链接(3.5 / 4),具有内部链接的名称可用作模板参数。

[*]对于类型,它必须具有外部链接。 对于对象和函数,如果将其地址用作模板参数,则必须具有外部链接,尽管例如可以将具有内部链接的const整数的用作模板参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM