可能重复:
Why is 'using namespace std;' considered a bad practice in C++?
有一天,当我问一个问题时,有人回复说如果有人问了一个问题,请告诉他们正确的方法,而不是using namespace std;
,我觉得这有点奇怪,因为using namespace std;
是方式更容易,但我想我现在失败了,因为我是一个'初学者'编码器,你们知道的更好。
所以我想我的问题是:
为什么std::
代替using namespace std;
?
感谢。
答案 0 :(得分:21)
来自C ++ FAQ:
我应该在代码中使用
using namespace std
吗?可能不是。
人们不喜欢打字
std::
他们发现了using namespace std
让编译器看到 任何std
名称,即使不合格。该 飞出那种药膏是它让它 编译器甚至可以看到任何std
名称 那些你没想过的人。在 换句话说,它可以创建名称 冲突和含糊不清。
https://isocpp.org/wiki/faq/coding-standards#using-namespace-std
答案 1 :(得分:4)
简而言之,您不太可能错误地使用错误的类型或功能,或者命名冲突。假设您正在使用自己的数学库和std,并以任意顺序使用它们来声明它们。现在,他们都定义了功能pow。你在调用战俘时使用哪种战俘?我认为值得额外打字。
答案 2 :(得分:2)
我不认为更有经验的程序员使用显式名称空间是这种情况,例如Do you prefer explicit namespaces or 'using' in C++?
但请注意,您永远不应在头文件中导入名称空间,并且在某些情况下,显式名称空间更清晰,例如使用函数std::min()
和std::max()
答案 3 :(得分:1)
我认为这是一种偏好的东西。有些人喜欢在使用类时看到显式名称空间。 一个例外是我从不在头文件中使用using namespace std。因为这可能会意外地改变使用此头文件的类的行为。
答案 4 :(得分:0)
命名空间是我们变量的附加限定符。假设我们在std
中定义了'字符串',现在如果我们在mynamespace
中定义'字符串'也是如此。
现在,如果我在文件的顶部写using namespace std;
,那么从那里开始,字符串对于编译器来说变得模棱两可。
然而,可以采用中间方法,在标题(.h)文件中严格没有using namespace std;
,因为其他人可能想要使用您的类并且可能会发生冲突。对于实现(.cxx)文件,如果您确定不会发生任何冲突,则可以小心使用它。
答案 5 :(得分:0)
经验丰富的程序员使用任何解决问题的方法,避免出现任何问题。
因此,出于显而易见的原因,他们避免使用头文件级使用指令。
他们试图避免在源文件中对名称进行完全限定。 不足之处在于,如果没有充分理由,那么编写更多代码就足够了。重点是关闭ADL。
这些有什么好理由?有时您明确要关闭ADL。有时你想消除歧义。
以下是可以接受的:1)函数级使用指令和函数实现中的using声明; 2)源文件中的源文件级使用声明; 3)(有时)源文件级使用指令。