【问题标题】:"using namespace" in header in namspace命名空间标题中的“使用命名空间”
【发布时间】:2015-02-19 18:16:23
【问题描述】:

我知道之前有人问过一个非常相似的问题,"using namespace" in c++ headers,但我的问题是在命名空间内。

namespace foo {
    using namespace std; // what does this do?

    class Bar { ... }
}

这是否与另一个问题所说的完全相同,只是在任何地方都包含该 using 语句?它只在那个命名空间中执行吗?它只在该标题中执行吗?

【问题讨论】:

标签: c++ namespaces using


【解决方案1】:

有两个区别:

  1. 是的,using 仅适用于 foo 命名空间内的代码。但这意味着所有看到此标头的foo 代码,所以您可能仍然不想这样做。
  2. 如果命名空间foo::std 存在,嵌套的using 语句将优先于::std

【讨论】:

  • 另外,using namespace foo; 会将整个 std 命名空间带入全局范围,这可能不是人们想要的。
  • 另外,只有在当前翻译单元中using namespace std; 之前可见的std 部分被导入到foo。在不同的翻译单元中,可以将不同的符号集导入foo,因为包含不同的标题。如果您在foo 中有任何内联代码,这可能会导致您的程序格式错误(无需诊断),其中相同的函数在两个不同的编译单元中有两个不同的定义,或其他类似问题。
  • 感谢您的回答。希望我能找到其他可以回答这个问题的问题。 :(不会浪费别人时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多