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

bal*_*lki 16 c++

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

Ste*_*sop 37

在C++ 03中,禁止将具有内部链接的名称用作模板参数[*].因此,未命名的命名空间中的大多数内容的名称都有外部链接,以允许它们与模板一起使用.您可以通过声明它在未命名的命名空间中明确地给出名称内部链接static,与命名或全局命名空间中的相同.

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

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

  • +1,请问,您能否在C++ 11标准中添加段落编号,表示内部链接是默认的? (3认同)