为什么有经验的编码人员使用 std:: 而不是使用命名空间 std;?[复制]

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

提问人:FuzionSki 提问时间:3/29/2011 最后编辑:CommunityFuzionSki 更新时间:12/20/2015 访问量:3728

问:

这个问题在这里已经有答案了:
12年前关闭。

可能的重复:
为什么“使用命名空间 std;”在 C++ 中被认为是一种不好的做法?

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

所以我想我的问题是: 为什么而不是?std::using namespace std;

谢谢。

C++ 命名空间 std using 指令

评论

2赞 Sapph 3/29/2011
查看 stackoverflow.com/questions/1452721/...

答:

21赞 Jonas Bötel 3/29/2011 #1

来自 C++ 常见问题解答:

我应该在代码中使用命名空间 std 吗?

可能不是。

人们不喜欢打字 然后,他们发现让编译器看到 任何名称,即使不合格。这 美中不足的是,它让 编译器可以看到任何名称,甚至 那些你没有想到的。在 换句话说,它可以创建名称 冲突和模棱两可。std::using namespace stdstdstd

https://isocpp.org/wiki/faq/coding-standards#using-namespace-std

评论

1赞 chustar 3/29/2011
是否有任何效率提升,或者这不是问题?
0赞 Cody Gray - on strike 3/29/2011
@chustar:你说的“效率”是什么意思?
0赞 chustar 3/29/2011
我的意思是,选择是否包含命名空间是否会影响程序的速度、大小或编译时间?
4赞 Ed S. 3/29/2011
这些都是在编译过程中完成的,生成的机器代码没有区别。
2赞 Jonas Bötel 3/29/2011
@chustar:由于解决了歧义,它的编译速度可能会更快一些。但我认为这并不重要。std::foo
0赞 Ozair Kafray 3/29/2011 #2

命名空间是变量的附加限定符。假设我们在 中定义了“字符串”,现在如果我们也定义了一个“字符串”。stdmynamespace

现在,如果我写在文件的顶部,那么从那里开始,字符串对于编译器来说变得不明确。using namespace std;

然而,人们可以采取一种中间的方法,严格不要在header(.h)文件中,因为其他人可能想要使用你的类并可能产生冲突。对于实现 (.cxx) 文件,如果您确定不会有任何冲突,则可以小心使用它。using namespace std;

4赞 juanchopanza 3/29/2011 #3

简而言之,您不太可能错误地使用错误的类型或函数,或者名称冲突。假设您正在使用自己的数学库和 std,并以某种任意顺序声明使用它们。现在,它们都定义了函数 pow。调用 pow 时使用的是哪个 pow?我认为这值得额外的输入。

2赞 Philipp 3/29/2011 #4

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

但请注意,您永远不应该在头文件中导入命名空间,并且在某些情况下,显式命名空间更清晰,例如函数和std::min()std::max()

1赞 Nic Strong 3/29/2011 #5

我认为这在某种程度上是一种偏好。有些人喜欢在使用类时看到显式命名空间。 一个例外是我从不在头文件中使用 using 命名空间 std。因为这可能会意外地改变使用此头文件的类的行为。

0赞 Alexander Poluektov 3/29/2011 #6

有经验的程序员使用任何可以解决他们问题的东西,并避免任何产生新问题的东西。

因此,出于显而易见的原因,他们避免了头文件级别的 using 指令。

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

这些好的理由是什么?有时,您明确希望关闭 ADL。有时你想消除歧义。

因此,以下情况是可以的:1)函数级的ususing指令和函数实现中的using声明;2)源文件级的using-declarations;3)(有时)源文件级 using 指令。