初学c++语言的时候,我很纳闷,为什么同样是包含头文件的include,在c语言中被包含的头文件一般都是.h文件,而在c++中包含的头文件,可以是.h文件,还可以是没有后缀名的文件(如典型的iostream),当然,其他的.hpp文件在这里暂且不论。还有,为什么c++包含的头文件可以是stdio.h,还可以是cstdio等等。
它们之间的差别是什么?这得从c++的编译环境说起了。
来看这张图:
(1) c语言兼容库
c++语言自诞生以来就肩负兼容c语言的重担,所以在c++的编译环境中会内置c库。在c++程序中,我们可以直接包含stdio.h文件
#include <stdio.h>
stdio.h是源于c语言标准c库的文件,所以其头文件是.h文件合情合理。这样子就可以使得c语言程序可以不做修改拿到c++编译环境中编译。
(2) c++标准库
c++标准库并非c++语言的一部分,它是由类库和函数库组成,其头文件是不包含.h后缀的,且定义的类和对象都位于std命名空间中。值得注意的是,c++标准库涵盖了c库的所有功能文件,如标准c库的stdio.h、stdlib.h,在c++标准也有也同样功能的文件,为cstdio、stdlib。
既然c++标准库已经涵盖了标准c库,为什么编译环境还要集成c语言兼容库呢?还是那句话,这样子就可以使得c语言程序可以不做修改拿到c++编译环境中编译。
(3)编译器扩展库
这是针对不同的编译器而独有扩展的,例如g++和vc++,它们在这一板块就不同
(4)c++标准语法模块
不用说,这是c++标准语法的支持
(5)c++扩展语法模块
同样是针对不同的编译器而独有扩展语法
到这里,之前的疑惑就迎刃而解了。
c++标准库还预定义了很多常用的数据结构,如链表、栈、队列等等。这也是接下来要学习的关键。强调一点,c++标准库的所有函数、类库都位于std命名空间中,在使用这些类库或者函数时候,要么需要作用域限定”std::”,要么使用其命名空间using namespace std;