我应该将"using namespace"放在命名空间的内部还是外部C++

Should I put the "using namespace" inside or outside of a namespace in C++

本文关键字:内部 外部 C++ using namespace 我应该 命名空间      更新时间:2023-10-16

我的导师在代码审查中这样修改了我的代码:

using namespace A; // defined in other files
namespace B{
// do something
}

而不是像这样:

namespace B{
using namespace A;
// do something
}

是否存在将using命名空间放在命名空间之外的技术原因?

在头文件中,你不应该在全局作用域中使用using namespace N;指令。

它将在所有客户端代码上强制使用N的大量标识符。

但是可以把它放在一个命名空间x中。只要记住,客户端代码做using namespace X;也将从N获得所有标识符。更保守的方法是在命名空间X中有一堆using 声明,例如using N::foo;


如果using namespace N;的原因是N是一个很长的名字,就像Not_short_enough_for_practical_use一样,另一种选择是使用名称空间别名–最好是在需要的最小范围内:

namespace N = Not_short_enough_for_practical_use;

老师的批改”将using namespace 移出之前的命名空间的值为负值。

你应该总是努力(在实际范围内)把任何东西的范围最小化。

你的问题看起来有点基于个人意见,取决于贵公司的内部政策。

可能有一个非常特殊的情况,但这里的一般建议是在尽可能接近它第一次使用的时候声明每个标识符。它将最小化滚动,使您的代码更容易阅读。它还会将标识符放在尽可能小和嵌套最多的命名空间中,防止更大的命名空间充斥不必要的标识符。

所以如果我是你,我会强烈要求你的导师对他提出的改变做出合理的解释。