因为 C++ 标准库非常庞大,所以程序员在选择类名或函数名时就很有可能和标准库的某个名字相同。
为了避免这种情况所造成的名字冲突,C++ 就把标准库中的一切都放到名字空间 std 中。但这又会带来一个新的问题,无数原有的C代码都依赖于使用了多年的伪标准库中的功能,而他们又都是全局空间下的。
于是就有了 <iostream.h>
和 <iostream>
等等这样的头文件。前者是为了兼容以前的 C 代码,后者是为了支持新的 C++ 标准。
名字空间本质上就是一个作用域,也是为了方便不同的程序在不同的平台上正确地运行(加强程序的可移植性)而引入的。
一般而言,下面三个程序是等价的:
#include<iostream.h>
void main()
{ ...
cin>>...
cout<<...
}
#include<iostream>
void main()
{ ...
std::cin>>...
std::cout<<...
}
#include<iostream>
using namespace std; //using是一个指示符
void main()
{ ...
cin>>...
cout<<...
}
但是在新的 C++ 标准下,更推荐使用后两者。
而且若较多地使用标准库写大程序时,最后一种形式比较方便,毕竟 using namespace std;
在同一个程序中仅需要写一次就足矣说明所引用的标准库函数都来自名字空间 std。
但如果不常用标准库(这不推荐,会降低移植性)或者小程序时,第二种形式也比较好。
第一种形式常用于不同运行平台间的程序移植,虽然语法没有错误,但不推荐用于写新程序。