【发布时间】:2014-09-17 21:00:12
【问题描述】:
这样的事情会产生一堆编译器错误,因为函数被限定为::isalnum:
namespace {
#include <iostream>
};
有没有办法在匿名命名空间中隐藏标准库函数?
【问题讨论】:
-
“有没有办法在匿名命名空间中隐藏标准库函数?” 简而言之:没有。为什么要这样做?
标签: c++
这样的事情会产生一堆编译器错误,因为函数被限定为::isalnum:
namespace {
#include <iostream>
};
有没有办法在匿名命名空间中隐藏标准库函数?
【问题讨论】:
标签: c++
不是真的(至少在通常的实现方式上)。
将某些内容放入命名空间会影响在对象文件中创建的项目的名称。
这意味着项目的声明和定义之间的“路径”(即获取名称的所有命名空间)需要相同,否则名称将不匹配。
如果您将标题包含在命名空间中,当您尝试链接时,它将查找不存在的名称,因此链接将失败。
在您上面使用的匿名命名空间的情况下尤其如此,这意味着定义仅在同一个翻译单元内可见。这意味着除非相关函数(等)的定义在该文件中,否则将它们放在匿名命名空间中意味着无论如何都找不到它们。
【讨论】: