为什么标准库假设它在全局命名空间中?

时间:2014-09-17 21:00:12

标签: c++

这样的事情会产生一堆编译器错误,因为这些函数是合格的::isalnum

namespace {

    #include <iostream>

};

有没有办法在匿名命名空间中隐藏标准库函数?

1 个答案:

答案 0 :(得分:2)

不是真的(至少以通常的方式实施)。

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

这意味着&#34;路径&#34; (即,要获取名称的所有名称空间)在项目的声明和定义之间需要相同,否则名称将不匹配。

如果将标题括在命名空间中,当您尝试链接它时,会查找不存在的名称,因此链接将失败。

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