全局空间与命名空间
我们在使用C++时,导入头文件一般有两种形式,带‘.h’和不带‘.h’。一般来说,不带‘.h’的是C++的标准头文件,带的是C语言的,‘.h’里面定义的所有类以及对象都是在全局空间里,不带的是在命名空间std里面。C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如strcmp。 这个头文件跟C++的string类半点关系也没有,所以并非的“升级版本”,他们是毫无关系的两个头文件。
我们在使用std命名空间时,不推荐直接使用using namespace std
, 因为这样引入了所有的组件函数名,相当于重新引发了名字空间泛滥的问题。同时,我们也不推荐在自己定义的头文件中使用using声明。
C++标准库与标准模板库关系
STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库的大约80%的分量。而作为在实现STL过程中扮演关键角色的模板则充斥了几乎整个C++标准函数库。
C++标准函数库为C++程序员们提供了一个可扩展的基础性框架。我们从中可以获得极大的便利,同时也可以通过继承现有类,自己编制符合接口规范的容器、算法、迭代子等方式对之进行扩展。
C++标准库是std名字空间中的所有内容,就是那些不带.h的头文件,如、等。如std::string,及IO流都不属于STL,
但它们是STL兼容的,可以应用迭代器,算法等。虽然std::string和IO流也是模板类,但并不属于STL。