代码之家  ›  专栏  ›  技术社区  ›  demoncodemonkey

在名称空间声明之后立即添加“使用名称空间”是否可以接受?

  •  1
  • demoncodemonkey  · 技术社区  · 16 年前

    我有一个包含一些类型定义的小名称空间,我用它来让代码看起来更干净。但是,我不想在每个使用这些类型之一的文件中添加“using namespace…”行,毕竟我已经为该文件添加了一个“include”。


    MyFile.cpp:

    #include "typedefs.h"
    void Bob()
    {
        IntList^ list = gcnew IntList;
    }
    

    typedefs.h:

    namespace Typedefs
    {
        typedef List<int> IntList;
        typedef array<int> IntArray;
        typedef List<Byte> ByteList;
        typedef array<Byte> ByteArray;
        typedef List<String^> StringList;
        typedef array<String^> StringArray;
    }
    using namespace Typedefs;
    

    在名称空间声明之后立即添加“using namespace”行是否可以接受?若否,原因为何?

    4 回复  |  直到 16 年前
        1
  •  3
  •   jpalecek    16 年前

    这是可能的,但我认为这不明智。它到处暴露其内容,从而破坏了名称空间的全部用途。如果您想要不必指定的舒适感 Typedefs:: using Typedefs::xxx; using namespace Typedefs;

        2
  •  2
  •   yesraaj    16 年前

    如果您希望名称仅对包含标题的文件可见,请使用unnamednamespace

    namespace {
      int i = 10;
    }
    

    上面的代码与下面的代码具有相同的效果

    namespace randomName {
      int i = 10;
    }
    using randomName; 
    

    因此,无法从任何其他文件访问任何内容。

        3
  •  1
  •   Timo Geusch    16 年前

    放置“使用命名空间XXX;”将指令插入头文件通常被认为是一个不好的主意,因为它从一开始就挫败了拥有名称空间的想法。它很容易导致引入名称空间应该避免的那种命名冲突。

    我的建议-不要这样做,如果有必要,将它们粘贴到相应的源文件(.cpp)中。

        4
  •  0
  •   Joao da Silva    16 年前

    您还可以在任何名称空间之外定义新类型,或者我遗漏了什么?