认识一下C++ 《标准库和std命名空间》

上一章是讲解命名空间,本节主要讲标准库和STD命名空间。

标准C语言(ANSI C)共定义了 15 个头文件,称为“C标准库”,所有的编译器都必须支持,它们包括:

C 头文件 说明

stdio.h 定义了用于输入和输出的函数、类型和宏。
stdlib.h 包含了C语言的中最常用的系统函数。
string.h 包含了C语言的最常用的字符串操作函数。
ctype.h 主要提供两类重要的函数:字符测试函数和字符大小转化函数。
assert.h 提供C语言断言功能,唯一的目的是提供宏assert的定义。
limits.h 指明了基本数据类型的取值范围。
stddef.h 定义了一些标准定义,许多定义也会出现在其他的头文件里。
time.h 获取时间与日期,对时间与日期数据操作及格式化的头文件。
float.h 定义了浮点型数值的最大最小限。
math.h 定义了与数学计算有关的函数。
error.h 错误处理。
locale.h 定义了本地化设置相关的函数。
setjmp.h 定义了一种特别的函数调用和函数返回顺序的方式。
signal.h 提供了一些函数用以处理执行过程中所产生的信号。
stdarg.h 可变参数列表,定义了一些宏,当函数参数未知时去获取函数的参数。

C++ 库

iostream.h:输入输出头文件。
fstream.h:文件操作头文件。
wchar.h:宽字符处理头文件。

和C语言一样,C++头文件仍然以.h
为后缀,其中的类、函数等都是全局范围的。

区别:

1、C语言的库定义了大量的函数、宏、自定义数据类型等。
2、C++新增的库主要定了大量的类,它们非常丰富也非常强大,对很多常用的功能进行了封装,例如链表、堆栈、树等数据结构,你不需要再从头写代码,会使用库就可以

历史回顾

C++引入了命名空间的概念,计划重新编写库,将类、函数等都统一纳入一个命名空间中(命名空间的名字是 std)。

但是这时已经有很多用老式C++开发的程序了,它们的代码中并没有使用命名空间,直接修改原来的库会带来一个很严重的后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准的C++代码。

C++开发人员想了一个好办法,保留原来的库和头文件,它们在C++中可以继续使用。然后再把原来的库复制一份,在此基础上稍加修改,把类、函数等纳入命名空间 std 下,就成了新版C++标准库。这样共存在了两份功能相似的库,使用了老式C++的程序可以继续使用原来的库,新开发的程序可以使用新版的C++库。

新版C++也对头文件的命名做了调整,去掉了后缀.h,所以老式C++的 变成了 变成了

而对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c
字母,所以C语言的 变成了 变成了

最后一点是,旧的C++头文件是官方所反对使用的,已明确提出不再支持,但旧的C头文件仍然可以使用,以保持对C的兼容性。实际上,编译器制造商不会停止对客户现有软件提供支持,所以可以预计,旧的C++头文件在未来几年内还是会被支持。

所以,实际来说,下面是C++头文件的现状:

  1. 旧的C++头文件,如 等将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在命名空间 std 中。

  2. 新的C++头文件,如 等包含的基本功能和对应的旧头文件相似,但头文件的内容在命名空间 std 中。

注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。

  1. 标准C头文件如 等继续被支持。头文件的内容不在 std 中。4) 具有C库功能的新C++头文件具有如 这样的名字。它们提供的内容和相应的旧C头文件相同,只是内容在 std 中。

历史总结:

C++ 的头文件去掉了 .h 例如: 变成了
C 的头文件为也去掉 .h 并且 在前面 添加了 c 例如: 变成了

虽然可以不按照上面的做法,工程里的仍然可以使用,但容易混淆概念。所以,不要混合使用。

使用C++标准头文件

之前的演示,C语言的格式输出函数 printf,引入了头文件 stdio.h,这完全没有错误,因为C++兼容C。但在C++代码中我还是推荐使用C++的头文件,不要把C和C++代码混合在一起使用。

例如,如果你打算使用printf 函数,那么应该引入 ,并使用命名空间 std,如下所示:

  #include 
  using namespace std;

C++ 将标准库中的所有类、函数等都放到了命名空间 std,一般在文件开头使用 using 关键字声明。 不是一个头文件,如果查看源代码你会发现它们并不一样。

#include 
using namespace std;

class Book{
private:
    float price;
public:
void setprice(float price1){
    price = price1;
}
float getprice(){
    return price;
}  
};

int main(){
float price;
Book book;

scanf("%f", &price);
book.setprice(price);
printf("The price of the book is %f.\n", book.getprice());

return 0;
}

虽然 using namespace std 是防止命名空间被污染,但是项目中的头文件里推荐少用或不用。因为直接using会把整个空间里的东西全部引入。很容易造成冲突。
来自“C语言中文网”。

你可能感兴趣的:(认识一下C++ 《标准库和std命名空间》)