【问题标题】:"using namespace std;" before any #include? [duplicate]“使用命名空间标准;”在任何#include 之前? [复制]
【发布时间】:2012-03-07 09:44:33
【问题描述】:

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

我记得我读过一个教程,它的所有源文件都使用

using namespace std;

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

【问题讨论】:

  • 是什么让你认为它不起作用?
  • @roh 我心里有种不好的感觉..
  • 这是你的技巧题之一吗?
  • “虽然不对,但感觉还是可以的”
  • @jalf 什么?这让我摸不着头脑,为什么即使没有包含任何标题,它也知道 std?!

标签: c++ namespaces using-directives


【解决方案1】:

有效,前提是你之前定义了命名空间std

namespace std {}
using namespace std;

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

【讨论】:

    【解决方案2】:

    是的,它完全有效。

    其实,又看了一遍标题。 . .如果您在任何包含的标题之前包含它,那么就没有那么多了。这是“有效的”,但不是好的做法。

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

    【讨论】:

    • 我应该如何处理链接页面?它没有为您的索赔提供证据,或者我找不到它。你能帮我再找一次吗?
    • 是的,抱歉,刚刚更新了我的帖子。
    • 这个答案是错误的,这与良好的做法无关,而是符合标准。并且根据回复this question时提供的引用,代码无效(尽管标准似乎有点模棱两可)。
    【解决方案3】:

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

    std::cincin,唯一的区别是 imo 懒惰。但是使用 using namespace std; 有效的。

    编辑:(供参考和更多说明)

    找到关于该主题的这两个参考资料,我认为您会发现第二个参考资料更有助于说明为什么它有效并且工作正常,但它被认为是不好的做法一些案例。 请检查cplusplusstackoverflow

    行情:

    我建议你避免使用指令;使用声明做很多事情 更有意义,尽管就个人而言,我宁愿完全使用 限定名称。

    例如,您可以使用:

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

    而不是使用整个标准。

    【讨论】:

      【解决方案4】:

      大多数编译器都遵循标准,尤其是像这样的基本规范将完全符合标准。但作为一名程序员,除非需要,否则我从不使用声明。我见过的大多数案例都与学校的课程有关。在实际生产中,我们必须理解用法,并且这些声明将在我们开始使用它的地方附近进行。但是以前从未使用过,尽管它可以工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 2011-08-29
        • 2012-09-01
        • 2014-01-08
        • 2011-10-17
        • 1970-01-01
        相关资源
        最近更新 更多