头文件和std命名空间
2022-5-1
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
C++是在C的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。这个时候的C++ 仍然在使用C语言的库,stdio.hstdlib.hstring.h 等头文件依然有效;此外 C++也开发了一些新的库,增加了自己的头文件,如:
  • iostream.h:用于控制台输入输出头文件
  • fstream.h:用于文件操作的头文件
  • complex.h:用于复数计算的头文件
 
 
C语言一样,C++头文件仍然以.h为后缀,它们所包含的类、函数、宏等都是全局范围的。
后来C++引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是stdstdstandard 的缩写,意思是“标准命名空间”。
 
但是这时已经有很多用老式 C++ 开发的程序了,它们的代码中并没有使用命名空间,直接修改原来的库会带来一个很严重的后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准的 C++ 代码。
C++开发人员想了一个好办法,保留原来的库和头文件,它们在C++中可以继续使用,然后再把原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间 std下,就成了新版C++标准库。这样共存在了两份功能相似的库,使用了老式C++的程序可以继续使用原来的库,新开发的程序可以使用新版的C++库。
 
为了避免头文件重名,新版C++ 库也对头文件的命名做了调整,去掉了后缀.h
  • 老式C++iostream.h变成了iostreamfstream.h变成了fstream :
    • 对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c字母,所以C语言的stdio.h变成了cstdiostdlib.h变成了cstdlib
     
    • 不带.h的头文件,所有的符号都位于命名空间std中,使用时需要声明命名空间std
    • .h的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。
     
     
    注意:旧的C++头文件是官方所反对使用的,已明确提出不再支持,但旧的C头文件仍然可以使用,以保持对C的兼容性:
     
     
    虽然C++几乎完全兼容C语言,C语言的头文件在C++中依然被支持,但C++新增的库更加强大和灵活,尽量使用这些C++新增的头文件,例如iostreamfstreamstring等:
  • C++
  • 命名空间初识输入输出
    目录