关于c ++:为什么std ::由经验丰富的编码器使用而不是使用命名空间std;?

Why is std:: used by experienced coders rather than using namespace std;?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why is 'using namespace std;' considered a bad practice in C++?

前几天,我问了一个问题,有人回答说,如果有人问了问题,请告诉他们正确的方法,而不是我认为有点奇怪的using namespace std;,因为using namespace std;要容易得多,但我想我现在失败了,因为我是一个"初学者"编码员,你们知道得更好。

所以我想我的问题是:为什么用std::代替using namespace std;

谢谢。


从C++常见问题解答:

Should I use using namespace std in my code?

Probably not.

People don't like typing std:: over
and over, and they discover that
using namespace std lets the compiler see
any std name, even if unqualified. The
fly in that ointment is that it lets
the compiler see any std name, even
the ones you didn't think about. In
other words, it can create name
conflicts and ambiguities.

https://isocpp.org/wiki/faq/coding standards使用命名空间std


简单地说,您不太可能错误地使用错误的类型或函数,或者名称冲突。假设您使用自己的数学库,加上std,并以任意顺序声明使用这两个库。现在,它们都定义了函数pow。调用pow时使用的是哪个pow?我认为这值得额外打字。


我不认为有经验的程序员使用显式的命名空间,例如,你喜欢C++中的显式命名空间还是"使用"?

但是请注意,不应在头文件中导入名称空间,并且在某些情况下,显式名称空间更清晰,例如对于函数std::min()std::max()


我认为这是一个什么样的偏好。有些人喜欢在使用类时看到显式名称空间。一个例外是我从不在头文件中使用using-namespace-std。因为这可能会意外地更改正在使用此头文件的类的行为。


经验丰富的程序员使用任何能解决问题的方法,避免任何能产生新问题的方法。

因此,由于明显的原因,它们避免了使用指令的头文件级别。

他们试图避免对源文件中的名称进行完全限定。次要的一点是,在没有充分理由的情况下,当代码不足时,编写更多的代码并不优雅。重点是关闭ADL。

这些好理由是什么?有时你明确地想要关闭ADL。有时你想消除歧义。

所以可以这样做:1)使用指令的函数级和使用函数实现中的声明;2)使用源文件中的声明的源文件级;3)(有时)使用指令的源文件级。


命名空间是变量的附加限定符。假设我们在std中定义了"字符串",现在如果我们在mynamespace中也定义了"字符串"。

现在,如果我在文件的顶部编写using namespace std;,那么从那里开始,编译器的字符串就变得模糊不清。

但是,可以采取中间的方法,严格地说,在头(.h)文件中没有using namespace std;,因为其他人可能希望使用您的类,并且可能会发生冲突。对于实现(.cxx)文件,如果您确定不会有任何冲突,则可以小心使用它。