using namespace std;
最近的 C++ 中有什么?
在 Turbo C++ 等旧编译器中,这似乎不受支持,因为它会导致编译器错误。在最近的 C++ 编译器中,这是编译和运行程序的唯一方法。
using namespace std;
最近的 C++ 中有什么?
在 Turbo C++ 等旧编译器中,这似乎不受支持,因为它会导致编译器错误。在最近的 C++ 编译器中,这是编译和运行程序的唯一方法。
Turbo C++ 是一个有 20 多年历史的编译器。你不应该使用它。
也就是说,
#include <iostream>
using namespace std;
在现代编译器中与在 Turbo C 中为标准头文件编写以下内容相同。
#include <iostream.h>
Turbo C++ 是前命名空间。所以所有标准标题都不在namespace std
. 所以你不需要 using namespace std
。
你永远不需要using namespace std
Turbo C++,因为它不支持命名空间。Turbo C++ 可能不支持 50% 的 C++ 东西——它已经很老了。使用 Visual C++(Express 版本是免费的)或用于 C++ 的 G++。
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;
}
名称allocator
、char_traits
和都在命名空间中声明basic_string
,因此在包含该标头后,您需要将它们引用为etc。string
std
std::string
或者,您可以使用using-directive,例如using namespace std
使命名空间std
中的所有名称在当前范围内可用,因此在 using-directive 之后,您可以只说string
而不是std::string
.
古老的TurboC++编译器不遵循标准,所以它的标准库只是把名字放在全局命名空间中,所以必须引用string
not std::string
,不能使用using-directives。第一个 C++ 标准于 1998 年发布,因此您不应该在 2013 年使用预标准编译器,这不会是一个有价值的教育。
using namespace std;
告诉编译器你不关心std
标准库中精心设计的使用,而是宁愿自己处理不可预测的,有时甚至是灾难性的名称冲突。
不要使用它。从来没有必要,即使某些 IDE 会自动插入它。如果您有其中之一,请在声明发生时删除它。
要使用标准库中的名称,请使用std::
. 像这样:
#include <iostream>
int main() {
std::cout << "Hello, world\n";
}