以下之间是否存在任何功能或优化差异?
// 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
}
}
答案 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 {
选项获得更令人困惑的错误消息,因为命名空间的右括号可能会关闭未正确关闭的其他内容。您可能最终会得到关于命名空间错过关闭括号的令人困惑的消息。
除此之外,我没有意识到任何差异。