C++I/O流类的安全性与可扩展性
在C语言中,我们都是使用scanf()与printf()函数进行输入输出,往往不能保证所输入输出的数据是可靠安全的。例如下面的代码:
int i = 1;
scanf("%d",i); //漏掉符号&
printf("%d", "C++"); //输出“C++”字符串的地址而不是字符串内容
在用scanf()输入整型变量i的值时,由于漏掉符号&,则会将输入的数值存储到地址编号为1的内存中,这将发生不可预测的严重错误,造成极大的安全隐患;而第三行代码用printf()函数输出字符串时由于错误的以“%d”的格式输出,则输出结果会是字符串的首地址而非其内容,显然是不符合结果的。
针对此种情况,C++系统的输入输出对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译,因此C++的I/O操作是类型安全的。
此外,用scanf()与printf()输入输出数据时,无法输出用户自定义的数据类型,然而在C++中,经常会对类的对象进行输入输出,显然无法用这两个函数处理。因此C++对I/O操作进行了扩展,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。C++对标准类型的数据和对用户声明类型数据的输入输出,采用同样的方法处理。可扩展性是C++输入输出的重要特点之一,它能提高软件的重用性,加快软件的开发过程。