C++ 为什么标准库假定它位于全局命名空间中?
类似这样的操作会导致一系列编译器错误,因为这些函数是限定的,如C++ 为什么标准库假定它位于全局命名空间中?,c++,C++,类似这样的操作会导致一系列编译器错误,因为这些函数是限定的,如::isalnum: namespace { #include <iostream> }; 名称空间{ #包括 }; 有没有办法在匿名名称空间中隐藏标准库函数?没有(至少在通常的实现方式中是这样) 将某些内容放入命名空间会影响在对象文件中创建的项的名称 这意味着“路径”(即获取名称的所有名称空间)在项的声明和定义之间必须相同,否则名称将不匹配 如果将头包含在名称空间中,当您尝试链接时,它将查找不存在的名称,
::isalnum
:
namespace {
#include <iostream>
};
名称空间{
#包括
};
有没有办法在匿名名称空间中隐藏标准库函数?没有(至少在通常的实现方式中是这样)
将某些内容放入命名空间会影响在对象文件中创建的项的名称
这意味着“路径”(即获取名称的所有名称空间)在项的声明和定义之间必须相同,否则名称将不匹配
如果将头包含在名称空间中,当您尝试链接时,它将查找不存在的名称,因此链接将失败
在上面使用的匿名名称空间中尤其如此,这意味着定义仅在同一翻译单元中可见。这意味着,除非相关函数(等)的定义在该文件中,否则将它们放在匿名命名空间中意味着无论如何都找不到它们。“有办法在匿名命名空间中隐藏标准库函数吗?”简言之:没有。为什么要这样做?