5

using namespace std;最近的 C++ 中有什么?

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

4

3 回答 3

6

Turbo C++ 是一个有 20 多年历史的编译器。你不应该使用它。

也就是说,

#include <iostream>
using namespace std;

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

#include <iostream.h>

Turbo C++ 是前命名空间。所以所有标准标题都不在namespace std. 所以你不需要 using namespace std

你永远不需要using namespace stdTurbo C++,因为它不支持命名空间。Turbo C++ 可能不支持 50% 的 C++ 东西——它已经很老了。使用 Visual C++(Express 版本是免费的)或用于 C++ 的 G++。

于 2013-10-27T12:52:38.440 回答
6

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_traits和都在命名空间中声明basic_string,因此在包含该标头后,您需要将它们引用为etc。stringstdstd::string

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

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

于 2013-10-27T13:09:51.037 回答
2

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

不要使用它。从来没有必要,即使某些 IDE 会自动插入它。如果您有其中之一,请在声明发生时删除它。

要使用标准库中的名称,请使用std::. 像这样:

#include <iostream>

int main() {
    std::cout << "Hello, world\n";
}
于 2013-10-27T14:13:56.180 回答