“using namespace std”的作用是什么?

62

using namespace std的作用是什么?

请以通俗易懂的方式解释。


7
通俗易懂地说,不要那样做这里有风险 - Frédéric Hamidi
https://www.youtube.com/watch?v=xfgcEjCd9as - NoWar
2个回答

95
  • using: 你要使用它。
  • namespace: 用来干什么?命名空间。
  • std: std 命名空间(其中声明了 C++ 标准库的功能,如 stringvector)。

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

如果你没有写它,当编译器看到 stringvector 时,它将不知道你指的是什么。你需要显式告诉它 std::stringstd::vector,如果你不这样做,你会得到一个编译错误。


4
完美无瑕。 - roottraveller

33

当您调用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
@Simple 我想保持简单,因为Op要求用通俗易懂的语言解释。 - Ivaylo Strandjev
1
值得一提的是,using-directivesusing-declarations 也受到作用域的限制。使用 using 并不是普遍不好的。 - thokra
假设想要从 std 中加载所有内容,应该怎么做?仅使用 using std:: 吗? - Sigur
如果你想从命名空间中加载所有内容,你应该像我在答案中写的那样写using namespace std。然而,你应该意识到后果,并且只有在真正需要时才使用它。 - Ivaylo Strandjev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接