C++ 头文件的现状:
- 旧的 C++ 头文件,如 iostream.h、fstream.h 等将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在命名空间 std 中。
- 新的 C++ 头文件,如 iostream、fstream 等包含的基本功能和对应的旧版头文件相似,但头文件的内容在命名空间 std 中。
注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧的头文件和新的头文件不一定完全对应。
标准C头文件如 stdio.h、stdlib.h 等继续被支持。头文件的内容不在 std 中。
具有C库功能的新C++头文件具有如 cstdio、cstdlib 这样的名字。它们提供的内容和相应的旧的C头文件相同,只是内容在 std 中。
可以发现,对于不带 .h
的头文件,所有的符号都位于命名空间 std
中,使用时需要声明命名空间 std
;对于带 .h
的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。
使用 C++ 的标准头文件中的内容,需要申明命名空间。有三种方式:
1、直接使用
#include <cstdio>
int main(){
std::printf("hello world!");
return 0;
}
2、使用 using
关键字申明(函数内局部申明)
#include <cstdio>
void func(){
using namespace std;
printf("hello world!");
}
int main(){
using namespace std;
printf("hello world!");
func()
return 0;
}
可以看到 在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明。
3、使用 using
关键字申明(全局申明)
#include <cstdio>
using namespace std;
void func(){
printf("hello world!");
}
int main(){
printf("hello world!");
func();
return 0;
}
很多教程中都是这样做的,将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,推荐在函数内部声明 std。