在头文件中使用C++'using'关键字是错误的吗?

Mr.*_*Boy 11 c++ namespaces

我被告知在头文件中使用"使用命名空间ns123"是不好的,但我不记得给出的原因是什么.这实际上是一件坏事,为什么?

Dan*_*son 25

一般来说,这是一种不好的做法,因为它违背了命名空间的目的.通过在头文件中定义,您不会强制严格控制using声明的范围,这意味着您可以在意外的位置遇到名称冲突.


dsi*_*cha 16

如果using在头文件中放置一个声明,那么头文件中的任何内容#include也会导入命名空间,无论它们是否需要.这违反了最少惊讶的原则,并通过允许更改#include语句以轻松导致命名冲突来破坏命名空间的目的.如果要在自己的.cpp文件中导入命名空间以节省一点输入并生成更易读的代码,那很好.只是不要强迫你的模块用户这样做.

  • `using namespace N;`是一个using指令,而不是using声明.使用声明可能是合适的,因为它只影响指定的名称,而不是N中的任何内容和所有内容,如果这是所需的.(`使用N :: name;`是一个使用声明的例子.) (3认同)