在头和源中创建C++命名空间(cpp)

lin*_*s77 81 c++ namespaces

在命名空间中包装header和cpp文件内容,或者只包装头内容然后在cpp文件中使用命名空间之间有什么区别吗?

差异我的意思是任何排序性能损失或稍微不同的语义,可能会导致问题或我需要注意的任何事情.

例:

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
namespace X
{
  void Foo::TheFunc()
  {
    return;
  }
}
Run Code Online (Sandbox Code Playgroud)

VS

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
using namespace X;
{
  void Foo::TheFunc()
  {
    return;
  }
} 
Run Code Online (Sandbox Code Playgroud)

如果没有差异,首选形式是什么?为什么?

Roe*_*rel 49

"名称空间X"与"使用名称空间X"的区别在于第一个新的声明将在名称空间下,而在第二个中它不会.

在你的例子中没有新的声明 - 所以没有差异,因此没有首选方式.


vpr*_*jan 35

命名空间只是一种破坏函数签名的方法,因此它们不会发生冲突.有些人喜欢第一种方式而有些人更喜欢第二种方式.两个版本对编译时性能没有任何影响.请注意,名称空间只是一个编译时实体.

使用命名空间时出现的唯一问题是我们有相同的嵌套命名空间名称(即)X::X::Foo.无论是否使用关键字,这样做会造成更多混淆.


Mic*_*ker 8

没有性能损失,因为结果可能是相同的,但是Foo如果你有Foo不同的命名空间,那么将你的命名空间隐含地引入了歧义.确实,你可以获得你的代码fubar.我建议不要using为此目的使用.

和你有一个流浪{using namespace;-)