建议23:尽量使用C++标准的iostream
IO是我们最基本的需求之一。比如当我们进入C++世界时所接触的第一个程序HelloWorld,采用printf()或operator<<都可以。所以,我们会有如下的版本:
|
stdio.h、cstdio两个头文件中都有printf()的定义,而iostream.h和iostream中也都有operator<<的定义。是stdio.h 还是cstdio?是iostream.h还是iostream?是printf() 还是operator<<?这些都值得思考。
关于File.h和File,这还得从C++标准库说起。C++标准程序库涵盖范围相当大,包含了许多好用的功能,所以,标准库与第三方提供程序库中的类型名称和函数名称发生名称冲突的可能性大大增加。为了避免这个问题的发生,标准委员会决定让标准库中的内容都披上std的外衣,放在std名空间中。但是这么做同时又带来了一个新的兼容性问题:很多C++程序代码依赖的都是没有用std包装的C++“准”标准库,例如iostream.h等,如果将原有的iostream.h贸然代替掉,那肯定会引起众多程序员的抗议。
标准化委员会最后决定设计一种新的头文件名来解决这个问题。于是,他们把C++头文件File.h中的.h去掉,将File这样没有后缀的头文件名分配给那些用std包装过的组件使用;而旧有的File.h保持不变,仅仅在标准中声明不再支持它,顺势把问题丢给了广大厂商,堵住了那些老程序员抗议的嘴。同样,对C的头文件也做了相同的处理,在前面加上了一个字母c以示区分。因为C++标准还要遵守“对C兼容”这个契约,备受“歧视”的旧有的C头文件“侥幸存活”了下来。虽然标准化委员会选择抛弃那些旧有的C++头文件,但是各大厂商为了各自的商业利益,却依然选择了对旧有C++头文件的支持。
因此就出现了类似stdio.h 和cstdio、iostream.h和iostream这样的双胞胎:
|
其实标准化以后标准程序库的改动并不只有这些,很多标准化的组件都被模板化了。