下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

初探C++标准库和std命名空间

作者:课课家     来源: http://www.kokojia.com点击数:959发布时间: 2019-03-18 15:18:41

标签: 编程语言C++标准库和std命名空间

大神带你学编程,欢迎选课

  在上一节中笔者给大家简单介绍了C++语言中的命名空间的基本概念,其主要作用是为了避免命名冲突,简化我们编写程序的过程,从而提高我们编程程序的效率。提到命名空间,通常都会联系到标准库和std命名空间的相关联的使用,那么到底什么是标准库和std命名空间呢?为此在本次的讲解中课课家笔者主要为大家介绍C++语言中的标准库和std命名空间的基本概念和应用。初探C++标准库和std命名空间_编程语言_C++_标准库和std命名空间_课课家

  众所周知,在标准C语言(ANSIC)中共定义了15个头文件,这些头文件被称为“C标准库”,相对应的所有的编译器都必须支持,具体头文件如下表所示:

头文件

  我们知道早期的C++语言还不完善,不支持命名空间,也没有自己的编译器,通常是将C++代码翻译成C代码,再通过C编译器编译成目标代码。尽管这个时候的C++仍然在使用C语言库,但还是开发了一些新的库增加了不少头文件,下面笔者给大家举几个头文件代码例子,具体如下:

  iOStream.h:输入输出头文件。

  fstream.h:文件操作头文件。

  wchar.h:宽字符处理头文件。

  通过观察上面几个代码例子,我们不难发现此时C++语言和C语言一样,头文件仍然以.h为后缀,其中的类、函数等都是全局范围的。C语言的库定义了大量的函数、宏、自定义数据类型等,而C++新增的库主要定了大量的类,它们非常丰富也非常强大,对很多常用的功能进行了封装,比如链表、堆栈、树等数据结构,因此我们不需要再从头写代码,只要会使用库就可以了。

  在随后的发展中C++引入了命名空间的概念,计划重新编写库,将类、函数等都统一纳入一个命名空间中(命名空间的名字是std)。但是此时已经有很多用老式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++头文件的现状:

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

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

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

  ③标准C头文件如<stdio.h>、<stdlib.h>等继续被支持。头文件的内容不在std中。

  ④具有C库功能的新C++头文件具有如<cstdio>、<cstdlib>这样的名字。它们提供的内容和相应的旧C头文件相同,只是内容在std中。

  ◎正确使用C++标准头文件

  在之前我们使用了C语言的格式输出函数printf并引入了头文件stdio.h,之所以输出结果没有出现错误主要是因为C++兼容C。但实际上笔者建议大家在C++代码中还是使用回C++的头文件,不要把C和C++代码混合在一起使用,比如使用printf函数,那么相对应的要引入<cstdio>,并使用命名空间std,具体代码如下所示:

  #include<cstdio>

  usingnamespacestd;

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

  #include<cstdio>

  usingnamespacestd;

  classBook{

  private:

  floatprice;

  public:

  voidsetprice(floatprice1){

  price=price1;

  }

  floatgetprice(){

  returnprice;

  }

  };

  intmain(){

  floatprice;

  Bookbook;

  scanf("%f",&price);

  book.setprice(price);

  printf("Thepriceofthebookis%f.\\n",book.getprice());

  return0;

  }

  输出结果:

  68.5↙

  Thepriceofthebookis68.500000.

  本次初探C++标准库和std命名空间的讲解到此就暂告一段落,如果以后有什么相关的内容继续补充或者修改的话,笔者会在此继续进行相关的内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习C++语言能够起到一定的帮助作用!

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程