相关疑难解决方法(0)

C++:命名空间 - 如何正确使用头文件和源文件?

考虑一对两个源文件:接口声明文件(*.h*.hpp)及其实现文件(*.cpp).

*.h文件如下所示:

namespace MyNamespace {
  class MyClass {
  public:
    int foo();
  };
}
Run Code Online (Sandbox Code Playgroud)

我在源文件中看到了两种不同的使用命名空间的做法:

*.cpp 练习#1:

#include "MyClass.h"
using namespace MyNamespace;

int MyClass::foo() { ... }
Run Code Online (Sandbox Code Playgroud)

*.cpp 练习#2:

#include "MyClass.h"
namespace MyNamespace {

  int MyClass::foo() { ... }

}
Run Code Online (Sandbox Code Playgroud)

我的问题:这两种做法之间是否有任何差异,哪一种被认为比另一种更好?

c++ namespaces header-files

75
推荐指数
4
解决办法
5万
查看次数

最佳实践:使用命名空间还是重新打开命名空间?

假设我在头文件中声明了一个函数(或类,无所谓),它是命名空间foo的一部分:

namespace foo
{
    void bar();
    …
}
Run Code Online (Sandbox Code Playgroud)

很久以来,当我在cpp文件中定义函数时,我一直在重新打开命名空间:

namespace foo
{
void bar()
{
    doSomething();
    …
}
}
Run Code Online (Sandbox Code Playgroud)

那是因为我以这种方式学习它并且它被用于我正在进行的项目中.直到最近,当我偶然发现一个使用using指令的项目时,我从未真正想过它:

using namespace foo;

void bar()
{
    doSomething();
    …
}
Run Code Online (Sandbox Code Playgroud)

最后,可以选择使用全名.我发现它非常繁琐,特别是当涉及到很多成员的课程时.在我看来,当文件的所有内容都是一个命名空间的一部分时,它没有多大意义.

void foo::bar()
{
    doSomething();
    …
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是哪一个应该是首选,为什么?特别是关于前两个选项(使用指令与重新打开命名空间).

c++ coding-style

14
推荐指数
2
解决办法
1676
查看次数

标签 统计

c++ ×2

coding-style ×1

header-files ×1

namespaces ×1