使用指令最佳实践

时间:2011-10-17 03:45:06

标签: c++ namespaces

以下之间是否存在任何功能或优化差异?

// SomeClass.cpp
#include "SomeClass.h"
#include "SomeOtherClassInSomeClassNamespace.h"

using namespace SomeClassNamespace;

SomeClass::SomeClass() {}

void SomeClass::SomeFunc() 
{
    // uses some stuff in SomeClassNamespace not defined  in SomeClass.h
}

// SomeClass.cpp
#include "SomeClass.h"
#include "SomeOtherClassInSomeClassNamespace.h"

namespace SomeClassNamespace
{
    SomeClass::SomeClass() {}

    void SomeClass::SomeFunc() 
    {
        // uses some stuff in SomeClassNamespace not defined  in SomeClass.h
    }
}

3 个答案:

答案 0 :(得分:2)

  

以下是否有任何功能差异?

只要合并的范围按预期解决,则

  

以下是否有任何优化差异?

运行时或二进制大小?

如果您想要 build 优化,那么将通过using和/或重新打开命名空间来引入额外的复杂性。

我不使用前者,因为解决方案可能会有问题。

我不使用后者,因为很容易得到新的声明。

我使用它的方式:

namespace {
  // ... private stuff
}

SomeClassNamespace::SomeClass::SomeClass() {}
...

这有点冗长,但快速解决定义及其声明,减少冲突的可能性,可以减少程序员错误,并且如果匿名命名空间中的定义最终导出(如果您也使用),则可以减少二进制大小私人实施)。当然,在正确的命名空间中保留你的内部(“SomeClassNamespace中的某些东西没有在SomeClass.h中定义”)也是有意义的(假设它们在多个TU中使用)。

答案 1 :(得分:1)

这是我使用using namespace X;

唯一时间

我确保文件中唯一的东西是命名空间X中的类的定义(一次只有一个类)。

我这样做的唯一原因是因为(以及个人观点)我认为它使整体阅读更容易。它记录了我们在顶部的一行中工作的命名空间(特别是如果它是一个多级嵌套命名空间)。

答案 2 :(得分:0)

要使namespace {保持一致,您应该缩进文件中的所有内容,这样可以减少在滚动到视图之前可以放在一行上的实际代码量。

using语句没有此问题。

您可能还会使用namespace {选项获得更令人困惑的错误消息,因为命名空间的右括号可能会关闭未正确关闭的其他内容。您可能最终会得到关于命名空间错过关闭括号的令人困惑的消息。

除此之外,我没有意识到任何差异。