Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么匿名命名空间中的函数/对象具有外部链接?_C++ - Fatal编程技术网

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

C++ 为什么匿名命名空间中的函数/对象具有外部链接?,c++,C++,为什么在匿名名称空间中定义的符号(函数和变量)与static关键字没有内部链接?如果函数在外部不可见/不可访问,那么使用外部链接的原因是什么?在C++03中,禁止将具有内部链接的名称用作模板参数[*]。所以,未命名名称空间中的大多数事物的名称都有外部链接,以允许它们与模板一起使用。您可以通过声明未命名命名空间中的名称内部链接static,在未命名命名空间中显式指定名称内部链接,与在命名命名空间或全局命名空间中相同 这两件事在C++11中都发生了变化——默认情况下,未命名名称空间中的名称具有内部链

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

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

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


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

它们没有外部链接,而是内部链接。您的源代码是什么?可能是C++03标准。@SteveJessop匿名名称空间也存在于C++03中,并提供内部LinkAge。@Luchian:不是这样的。比较C++03和C++11之间的3.5/4。请将C++11标准中的段落号添加到答案中,该段落号表示内部链接是默认的?