什么是`using namespace std;`,为什么我需要它用最近的C++编译器编译程序?

dar*_*sud 4 c++

什么是using namespace std;近年来C++?

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

use*_*353 5

Turbo C ++是20年前的编译器。您不应该使用它。

那就是

#include <iostream>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

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

#include <iostream.h>
Run Code Online (Sandbox Code Playgroud)

Turbo C ++是预命名空间。因此,所有标准标头都不在中namespace std。因此,您不需要使用namespace std

using namespace std在Turbo C ++中,您将永远不需要,因为它不支持名称空间。Turbo C ++可能不支持50%的C ++东西-那已经很老了。对Visual C ++使用Visual C ++(Express版本免费)或G ++。

  • 有关一些可免费使用的现代编译器,请参见http://isocpp.org/get-started。 (5认同)
  • 您需要找到一所新学院。显然,您不会学习真正的C ++。 (4认同)
  • 学习过时的C ++没有任何意义。如果您想学习基础知识,请研究Assembler和/或C-如果您想学习适当的C ++,请使用现代的编译器。 (3认同)

Jon*_*ely 5

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;
}
Run Code Online (Sandbox Code Playgroud)

名称allocator,char_traits,basic_string并且string都在命名空间中声明std,所以包括报头之后,你需要把它们称为std::string等等.

或者,您可以使用using指令,例如using namespace std使命名空间std中的所有名称在当前作用域中可用,因此遵循using指令您可以说string而不是std::string.

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