在标头和源代码 (cpp) 中创建 C 命名空间

新手上路,请多包涵

将标头和 cpp 文件内容包装在名称空间中或仅包装标头内容然后在 cpp 文件中 使用名称空间 之间有什么区别?

我所说的差异是指任何可能导致问题或我需要注意的任何排序性能损失或稍微不同的语义。

例子:

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

// cpp
namespace X
{
  void Foo::TheFunc()
  {
    return;
  }
}

VS

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

// cpp
using namespace X;
{
  void Foo::TheFunc()
  {
    return;
  }
}

如果没有区别,首选形式是什么,为什么?

原文由 links77 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 569
2 个回答

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

使用命名空间出现的唯一问题是我们有相同的嵌套命名空间名称(即) X::X::Foo 。这样做会在使用或不使用关键字的情况下造成更多的混乱。

原文由 vprajan 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者您可以执行以下操作:

 // asdf.h
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

然后

// asdf.cpp
#include "asdf.h"

void X::Foo::TheFunc()
{
  return;
}

原文由 orbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题