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