“using namespace std;”在任何#include之前?

时间:2012-03-07 09:44:34

标签: c++ namespaces using-directives

  

可能重复:
  Ordering of using namespace std; and includes?

我记得我读过一个用

启动所有源文件的教程
using namespace std;

当我用我的GCC编译器测试它时,它接受了代码。但这样的代码是否有效?

4 个答案:

答案 0 :(得分:2)

如果你在之前定义名称空间std,它是有效的:

namespace std {}
using namespace std;

然而,这可能不是一个好主意,因为它对所有包含的标题施加了using namespace std;

答案 1 :(得分:1)

是的,这完全有效。

实际上,再次阅读标题后。 。 。如果您在任何包含的标题之前包含它,那么不是这样。这是“有效的”,但不是很好的做法。

请参阅C++: What's happen when I use "using namespace xyz" before #include<headerxy>

答案 2 :(得分:1)

在我看来,使用使用命名空间std; 而不使用它的唯一区别是,当你使用它时,你可能会在以后的代码变量中遇到冲突(冲突名称)。 此外,它可能会污染其他人的命名空间,因为当您使用它时,您在命名空间std 中包含所有内容,因此建议您不要在头文件中使用它。但是你可以在cpp文件中使用它。

std :: cin cin ,唯一不同的是懒惰imo。但是使用使用命名空间std; 有效。

编辑:(有关参考资料和更多说明)

找到关于这个主题的两个参考文献,我想你会发现第二个更有用的是为什么它有效并且工作正常,但它被认为是不良做法一些案例。 请检查cplusplusstackoverflow

行情:

  

我建议你不要使用指令;使用声明做了很多   更有意义,虽然,就个人而言,我宁愿完全使用   合格的名字。

例如,你可以使用:

using std::cout;
using std::cin;
using std::endl;

而不是使用整个标准。

答案 3 :(得分:0)

大多数编译器都遵循标准,特别是像这样的基本规范将完全符合标准。但作为程序员,我从未使用过声明,除非有要求。我见过的大多数案例都与学校的课程有关。在实际生产中,我们必须对使用有所了解,这些声明将在我们开始使用它的地方附近。但是之前从未使用过包括虽然它有效!