在C++中,变量和函数的作用范围是有一定限制的,比如在函数体中定义的临时变量就不可以在函数体外使用。为了解决变量和函数的作用范围,C++引入了命名空间的概念;增加了关键字 namespace 和 using,std 就是标准程序库所在命名空间(namespace)的名称,using namespace std就是使用标准库的意思。
在一个namespace中可以定义一组变量和函数,这些变量和函数的作用范围一致,可以将这些变量和函数称为这个namespace的成员。
通过namespace,可以在同一个文件中使用相同的变量名或函数名,只要它们属于不同的命名空间。另外,命名空间可以使得代码操作具有相同名字但属于不同库的变量。而且,名空间也可以提高C语言与C++语言的兼容性。
利用using声明可以在引用名空间成员时不必使用名空间限定符::。例如使用C++标准程序库的任何标识符时,可以有三种选择:
- 直接指定标识符。例如
std::cout << std::hex << 3.4 << std::endl;
- 使用using 关键字。例如
using std::cout << std::hex << 36.1 <<using std::endl;
- 直接使用。
cout << std::hex << 3.4 << endl;
声明namespace之后,C++的头文件也发生了变化。<iostream >
和<iostream.h>
是不一样,前者没有后缀,两者里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些C++的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里。之后C++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因 此,当使用<iostream.h>
时,相当于在C中调用库函数,使用的是全局命名空间,也就是早期的C++实现;当使 用<iostream>
的时候,该头文件没有定义全局命名空间,必须使用namespace std;