【问题标题】:Why does the standard library assume it is in the global namespace?为什么标准库假定它在全局命名空间中?
【发布时间】:2014-09-17 21:00:12
【问题描述】:

这样的事情会产生一堆编译器错误,因为函数被限定为::isalnum

namespace {

    #include <iostream>

};

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

【问题讨论】:

标签: c++


【解决方案1】:

不是真的(至少在通常的实现方式上)。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2012-11-16
    • 2017-06-01
    • 2020-06-19
    相关资源
    最近更新 更多