C/C++头文件版本演变
参考:
http://blog.sina.com.cn/s/blog_a2d423a001010qzn.html
http://blog.csdn.net/luoweifu/article/details/20242307
在将C库和旧的C++库放入名字空间std 中的过程中,对
1)旧的C++头文件。将C++头文件名中的.h 去掉,所以<iostream.h>变成了<iostream>,<complex.h>变成了<complex>,等等。
2)旧的C头文件。对于C 头文件,采用同样的方法,但在每个名字前还要添加一个c,所以C 的<string.h>变成了<cstring>,<stdio.h>变成了<cstdio>,等等。
最后一点是,旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C 头文件则没有(以保持对C 的兼容性)。实际上,编译器制造商不会停止对客户现有软件提供支持,所以可以预计,旧的C++头文件在未来几年内还是会被支持。
综上,标准C 头文件如<stdio.h>继续被支持,头文件的内容不在std 中。具有C库功能的新C++头文件具有如<cstdio>这样的名字,它们提供的内容和相应的旧C头文件相同,只是内容在std 中。旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中,这些头文件的内容不在名字空间std 中。新的C++头文件如<iostream>包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std 中。
两个过程:
C库-->C++的std库
旧的C++库-->C++的std库
特别地,关于字符串头文件:
<string.h>是旧的C头文件,对应的是基于char*的字符串处理函数,包含strcpy、strcat之类;
<cstring>是对应于旧C头文件的std版本;
<string>是包装了std的C++头文件,对应的是新的string类。它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。
因此,关于字符串直接使用<string>即可。
参考:
http://blog.sina.com.cn/s/blog_a2d423a001010qzn.html
http://blog.csdn.net/luoweifu/article/details/20242307
在将C库和旧的C++库放入名字空间std 中的过程中,对
1)旧的C++头文件。将C++头文件名中的.h 去掉,所以<iostream.h>变成了<iostream>,<complex.h>变成了<complex>,等等。
2)旧的C头文件。对于C 头文件,采用同样的方法,但在每个名字前还要添加一个c,所以C 的<string.h>变成了<cstring>,<stdio.h>变成了<cstdio>,等等。
最后一点是,旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C 头文件则没有(以保持对C 的兼容性)。实际上,编译器制造商不会停止对客户现有软件提供支持,所以可以预计,旧的C++头文件在未来几年内还是会被支持。
综上,标准C 头文件如<stdio.h>继续被支持,头文件的内容不在std 中。具有C库功能的新C++头文件具有如<cstdio>这样的名字,它们提供的内容和相应的旧C头文件相同,只是内容在std 中。旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中,这些头文件的内容不在名字空间std 中。新的C++头文件如<iostream>包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std 中。
两个过程:
C库-->C++的std库
旧的C++库-->C++的std库
特别地,关于字符串头文件:
<string.h>是旧的C头文件,对应的是基于char*的字符串处理函数,包含strcpy、strcat之类;
<cstring>是对应于旧C头文件的std版本;
<string>是包装了std的C++头文件,对应的是新的string类。它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。
因此,关于字符串直接使用<string>即可。