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

时间:2011-03-29 07:11:25

标签: c++ namespaces std using-directives

  

可能重复:
  Why is 'using namespace std;' considered a bad practice in C++?

有一天,当我问一个问题时,有人回复说如果有人问了一个问题,请告诉他们正确的方法,而不是using namespace std;,我觉得这有点奇怪,因为using namespace std;方式更容易,但我想我现在失败了,因为我是一个'初学者'编码器,你们知道的更好。

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

感谢。

6 个答案:

答案 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)(有时)源文件级使用指令。