【问题标题】:Using a namespace twice使用命名空间两次
【发布时间】:2009-06-16 12:24:58
【问题描述】:

在 c++ 中是否可以包含两次相同的命名空间? 编译器不会给出任何错误,但无论如何它仍然会影响

谢谢,

编辑:
我的意思是

using namespace std;

// . . STUFF
using namespace std;

【问题讨论】:

  • 请澄清“两次包含相同的命名空间”。您是否在询问是否可以声明“使用某个命名空间;使用某个命名空间;”或者您是在问是否可以多次声明命名空间,如“命名空间 SomeNamespace {} namespace SomeNamespace {}”?
  • 我的意思是使用命名空间std; . .使用命名空间标准;
  • 我知道两次添加同一行会很愚蠢。但是如果“使用命名空间std”完成了两个不同的头文件并且都包含在.cpp文件中会有任何问题

标签: c++ namespaces


【解决方案1】:

这取决于您所说的“包含”是什么意思。说:

using namespace std;    
...    
using namespace std:

没问题。但是说:

namespace X {
   ...
namespace X {

将创建一个名为 X::X 的嵌套命名空间,这可能不是您想要的。

【讨论】:

    【解决方案2】:

    这个用法很好,如果你在说什么:

    文件:foo.h

    namespace tools
    {
      class Widget
      {
      ...
      };
    }
    

    文件:bar.h

    namespace tools
    {
      class Gizmo
      {
      ...
      };
    }
    

    【讨论】:

      【解决方案3】:

      在同一个类/文件中有两次?这不应该是一个问题,但也不应该是必要的。我天真地假设你应该能够重构你的代码以避免这个问题。

      【讨论】:

        【解决方案4】:

        你是在问以下是否可以?

        using namespace std;
        using namespace std;
        

        没关系,但通常我更喜欢使用范围解析来引用命名空间元素。

        例如:

        std::vector
        std::sort
        

        【讨论】:

          【解决方案5】:

          我不完全确定你的意思。您可以将多个类放在一个命名空间中(这就是整个想法)。每个类通常都有自己的文件,所以是的,您可以在多个文件中使用相同的命名空间。

          虽然技术上没有要求,但最好有一个目录结构来表示您创建的命名空间层次结构。

          至于 using 指令:编译器和/或智能感知最有可能给你一个警告(C# 有),否则没有任何效果。

          【讨论】:

            猜你喜欢
            • 2015-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-03
            • 2011-05-07
            • 1970-01-01
            • 2011-12-11
            相关资源
            最近更新 更多