【问题标题】:where to put using namespace std;在哪里放置 using namespace std;
【发布时间】:2011-09-22 10:01:03
【问题描述】:

我想知道将using namespace std; 放在哪里。我在int main(){} 中看到了带有using namespace std; 的代码,但我把它放在#include <iostream> 之后。我应该把它放在哪里,放在哪里有什么不同吗?

【问题讨论】:

  • 不要放在任何地方!
  • @Martin:嗯,这太严格了。有很多小项目/文件添加 using namespace std; 不会导致问题。
  • 绝对永远不会把它放在头文件中。最好不要在任何地方使用“使用命名空间标准”。我同意马丁的观点。
  • @Ed S:这不是为了引起问题,而是关于一致性。但小项目使用的反驳论点。如果项目小为什么还要用,那就是偷懒了。

标签: c++ namespaces using-directives


【解决方案1】:

将它添加到函数内部会将 using 语句的范围仅限于该函数。你不应该在头文件中放置using 语句,以避免与头文件的用户发生冲突。

如果您知道不会出现冲突,则将其放在文件范围内的 main 之上是可以的,但即使这样也可能会导致其他导入类型出现问题,并且通常在中等规模的项目中应避免。我尽量避免污染全局命名空间,但如果我正在编写一次性的小型实现文件,我会在顶部添加一个using namespace std; 以方便。

在您的情况下,假设您只想使用 std::coutstd::cin(只是一个示例),您可以这样做:

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

现在您可以编写 cin >> whatevercout << whatever 而无需每次都完全限定类型/对象,并且还可以避免污染全局命名空间。

【讨论】:

    【解决方案2】:

    它会在你放置它的地方产生巨大的不同。

    如果你把它放在一个函数中,那么它只适用于那个函数。

    如果您将它放在全局范围内的函数之外,那么它适用于该点之后的所有内容。

    如果您将它放在头文件中全局范围内的函数之外,那么它甚至会应用于包含该头文件的任何文件。

    通常,在标头的全局范围内使用它是非常糟糕的做法,而在全局范围内使用它则完全是半坏的做法,因为在 Unity builds 中,标头和源文件之间的区别是模糊的。

    您最好只在您需要的函数中使用它,甚至根本不使用它,只需在标准库函数/类前面加上 std::

    【讨论】:

      【解决方案3】:

      一般来说(当然在大型项目中),最好not to use it at all

      【讨论】:

        【解决方案4】:

        using 指令是有范围的,所以它只在它出现的范围内有效。在最适合您情况的地方使用它。

        【讨论】:

          【解决方案5】:

          如果您不喜欢在任何地方输入 std:: (我喜欢,我的代码中没有足够的双冒号!),最佳做法是有选择地将您想要的名称导入范围,如下所示:

          void some_function()
          {
            using std::vector;
          
            vector<int> x;
            ...
          }
          

          在全局范围内也可以use 选定名称。

          这样您就不会将标准库中的所有名称都拉到全局命名空间中。

          【讨论】:

            【解决方案6】:

            它会将std 中的所有内容都带入范围,无论您放在哪里。如果它在文件范围内,它在文件中的任何地方都计数,如果它在一个函数中,它只适用于函数内 - 所以它取决于你想要什么。就个人而言,我不喜欢声明using namespace std

            【讨论】:

              【解决方案7】:

              这里很多人会说你根本不应该使用它。这样做的原因是,如果你不小心定义了一个已经在 std 命名空间中的函数,可能会发生冲突,对于非常大的项目,这可能很难追踪。对于琐碎的程序,老实说,这不是什么大问题,但你把它放在哪里确实会有所作为。

              在全球范围内,它适用于任何地方。在本地范围内(即仅在 main() 中),它将仅适用于 main。

              这里有一些不错的选择

              • 将 std:: 放在所有内容之前,即 std::cout &lt;&lt; "Hello, World!" &lt;&lt; std::endl;
              • 仅在函数中使用您想要的特定内容。

              在本地函数中只使用你想要的东西的例子:

              int main()
              {
                 using std::cout;
                 using std::endl;
                 cout << "Hello, World!" << endl;
                 return 0;
              } // Obviously you need #include <iostream> at the top..
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-10-14
                • 1970-01-01
                • 2016-02-27
                • 2017-04-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多