Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++,类似这样的操作会导致一系列编译器错误,因为这些函数是限定的,如::isalnum: namespace { #include <iostream> }; 名称空间{ #包括 }; 有没有办法在匿名名称空间中隐藏标准库函数?没有(至少在通常的实现方式中是这样) 将某些内容放入命名空间会影响在对象文件中创建的项的名称 这意味着“路径”(即获取名称的所有名称空间)在项的声明和定义之间必须相同,否则名称将不匹配 如果将头包含在名称空间中,当您尝试链接时,它将查找不存在的名称,

类似这样的操作会导致一系列编译器错误,因为这些函数是限定的,如
::isalnum

namespace {

    #include <iostream>

};
名称空间{
#包括
};
有没有办法在匿名名称空间中隐藏标准库函数?

没有(至少在通常的实现方式中是这样)

将某些内容放入命名空间会影响在对象文件中创建的项的名称

这意味着“路径”(即获取名称的所有名称空间)在项的声明和定义之间必须相同,否则名称将不匹配

如果将头包含在名称空间中,当您尝试链接时,它将查找不存在的名称,因此链接将失败

在上面使用的匿名名称空间中尤其如此,这意味着定义仅在同一翻译单元中可见。这意味着,除非相关函数(等)的定义在该文件中,否则将它们放在匿名命名空间中意味着无论如何都找不到它们。

“有办法在匿名命名空间中隐藏标准库函数吗?”简言之:没有。为什么要这样做?