C++ 头文件的现状:

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


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

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

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

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

可以发现,对于不带 .h 的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带 .h 的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。

使用 C++ 的标准头文件中的内容,需要申明命名空间。有三种方式:

1、直接使用

  1. #include <cstdio>
  2. int main(){
  3. std::printf("hello world!");
  4. return 0;
  5. }

2、使用 using 关键字申明(函数内局部申明)

  1. #include <cstdio>
  2. void func(){
  3. using namespace std;
  4. printf("hello world!");
  5. }
  6. int main(){
  7. using namespace std;
  8. printf("hello world!");
  9. func()
  10. return 0;
  11. }

可以看到 在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明。

3、使用 using 关键字申明(全局申明)

  1. #include <cstdio>
  2. using namespace std;
  3. void func(){
  4. printf("hello world!");
  5. }
  6. int main(){
  7. printf("hello world!");
  8. func();
  9. return 0;
  10. }

很多教程中都是这样做的,将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,推荐在函数内部声明 std。