【问题标题】:What is the use of "using namespace std"? [duplicate]“使用命名空间标准”有什么用? [复制]
【发布时间】:2013-09-25 16:25:48
【问题描述】:

using namespace std 有什么用?

我希望看到通俗易懂的解释。

【问题讨论】:

标签: c++ namespaces std using


【解决方案1】:
  • 使用:您将使用它。
  • 命名空间:使用什么?命名空间。
  • stdstd 命名空间(其中声明了 C++ 标准库的功能,例如 stringvector)。

在你写完这条指令后,如果编译器看到string,它就会知道你可能指的是std::string,如果它看到vector,它就会知道你可能指的是std::vector。 (当然,前提是您在编译单元中包含了定义它们的头文件。)

如果您编写它,当编译器看到stringvector 时,它不会知道您指的是什么。您需要明确告诉它std::stringstd::vector,否则会出现编译错误。

【讨论】:

  • 完美...
【解决方案2】:

当您调用using namespace <some_namespace>; 时,该命名空间中的所有符号都将变为可见,而无需添加命名空间前缀。例如,符号可以是函数、类或变量。

例如如果添加using namespace std;,则在调用命名空间std 中定义的运算符cout 时,可以只写cout 而不是std::cout

这有点危险,因为命名空间是用来避免名称冲突的,通过编写using namespace 可以节省一些代码,但会失去这个优势。一个更好的选择是只使用特定的符号,从而使它们在没有命名空间前缀的情况下可见。例如:

#include <iostream>
using std::cout;

int main() {
  cout << "Hello world!";
  return 0;
}

【讨论】:

  • 请记住,using-directiveusing-declaration 在名称查找方面存在细微差别。
  • @Simple 我想保持简单,因为 Op 要求用外行术语进行解释。
  • 另外值得一提的是,using-directivesusing-declarations 也受作用域限制。使用 using 并不是普遍的坏事。
  • 假设希望从std 加载所有内容。怎么做?仅限using std::
  • 如果你想从命名空间加载所有东西,你应该写using namespace std,就像我在我的回答中写的那样。但是,您应该意识到后果,并且只有在确实需要时才应该使用它
猜你喜欢
  • 1970-01-01
  • 2013-02-08
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
相关资源
最近更新 更多