什么是“使用命名空间 std;”,为什么我需要它来编译具有最新C++编译器的程序

What is `using namespace std;`, and why do I need it to compile programs with recent C++ compilers?

本文关键字:编译 最新 程序 编译器 C++ 命名空间 std 为什么 什么      更新时间:2023-10-16

最近C++using namespace std;是什么?

在 Turbo C++ 等旧编译器中,这似乎不受支持,因为它会导致编译器错误。在最近的C++编译器中,这是编译和运行程序的唯一方法。

>C++使用"命名空间"对相关的类和函数进行分组。 C++标准库几乎完全在名为 std("标准"的缩写)的命名空间中定义。 当您#include标准标头(如 <string>)时,它包含如下定义:

namespace std
{
  template<typename T>
    class allocator;
  template<typename Ch>
    class char_traits
    {
       // ...
    };
  template<typename Ch, typename Traits = char_traits<Ch>, typename Alloc = allcoator<Ch>>
    class basic_string
    {
       // ...
    };
  typedef basic_string<char, char_traits<char>, allocator<char> > string;
}

名称 allocatorchar_traitsbasic_stringstring 都是在命名空间std中声明的,所以在包含该标头后,您需要将它们称为 std::string 等。

或者,您可以使用 using 指令(例如 using namespace std),它使命名空间中的所有名称std在当前范围内可用,因此在 using-指令之后,您可以只说 string 而不是 std::string

古老的 TurboC++ 编译器不遵循标准,因此它的标准库只是将名称放在全局命名空间中,因此您必须引用string而不是std::string并且不能使用 using-指令。 第一个C++标准发布于 1998 年,因此您不应该在 2013 年使用预标准编译器,这不会是有价值的教育。

Turbo C++ 是一个 20+ 岁的编译器。你不应该使用它。

可是

#include <iostream>
using namespace std;

现代编译器中与在 Turbo C 中为标准标头编写以下内容相同。

#include <iostream.h>

Turbo C++ 是预命名空间。所以所有标准标头都不在namespace std.所以你不需要使用namespace std.

在 Turbo C++ 中,您永远不需要using namespace std,因为它不支持命名空间。Turbo C++ 不支持大约 50% 的C++东西 - 它太旧了。使用 Visual C++(Express 版本是免费的)或 G++ for C++。

using namespace std;告诉编译器,你不关心标准库中精心设计的std的使用,而是自己处理不可预测的,有时甚至是灾难性的名称冲突。

不要使用它。它永远不是必需的,即使某些 IDE 会自动插入它。如果您有其中之一,请在声明发生时将其删除。

要使用标准库中的名称,请使用 std:: 进行限定。喜欢这个:

#include <iostream>
int main() {
    std::cout << "Hello, worldn";
}