认识一下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++的 <iostream.h> 变成了 <iostream>,<fstream.h> 变成了 <fstream>。

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

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

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

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

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

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

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

历史总结:

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

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

使用C++标准头文件

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

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

  #include <cstdio>
  using namespace std;

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

#include <cstdio>
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语言中文网”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容