我应该将"using namespace"放在命名空间的内部还是外部C++
Should I put the "using namespace" inside or outside of a namespace in C++
我的导师在代码审查中这样修改了我的代码:
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
移出之前的命名空间的值为负值。
你应该总是努力(在实际范围内)把任何东西的范围最小化。
你的问题看起来有点基于个人意见,取决于贵公司的内部政策。
可能有一个非常特殊的情况,但这里的一般建议是在尽可能接近它第一次使用的时候声明每个标识符。它将最小化滚动,使您的代码更容易阅读。它还会将标识符放在尽可能小和嵌套最多的命名空间中,防止更大的命名空间充斥不必要的标识符。
所以如果我是你,我会强烈要求你的导师对他提出的改变做出合理的解释。
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 从函数角度看ID到文件路径的内部与外部映射
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 类内部和外部静态 constexpr 元组之间的差异
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- CMake 外部和内部静态库的循环依赖关系
- 当使用lambda进行变量的复杂初始化时,如何处理从内部抛出的lambda外部异常
- 在命名空间内部还是外部实现 c++ 函数?
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 'cmake'不被识别为内部或外部命令 - 北极星
- C++:在循环内部或外部声明一个向量
- 如何使结构内部的可变参数模板可以在外部访问?
- exe文件不被识别为内部或外部命令,可操作的程序或批处理文件在C++
- 初始化向量的向量(外部向量和内部向量)
- G++ 自定义任务在外部终端中打开,与 VS 代码内部终端
- 使用 java 类在 C++ 内部导入外部 jarfile
- 用相同的参数将内部和外部构造函数分开
- 有什么区别:在命名空间 yyy 外部和内部使用 namespae xxx?
- 参数内部和外部的指针
- 类型是否只有内部/外部链接以外的"链接"?