1、最重要的原因当然是C++提供了流对象‘>>’和‘<<’,它们代表了新观念。
流对象能输出对象,而printf函数和scanf函数不能。
2、
printf本身有问题,它不是类型安全的。
举个例子。下面的程序会输出什么呢?
#include
int main()
{
float a = 3.14;
printf("%d\n", a);
//printf("%d\n", (int)a); //强制转换,这样才能输出3
return 0;
}
这个时候我们需要对a进行强制类型转换,否则输出结果就不是我们想要的3。
什么原因呢?这涉及到float、double、int的位分布问题了。
3、
首先让我们观察一下printf函数和scanf函数的声明,它们分别是:
int printf( char *, ...);
int scanf( char *, ...);
我们看到,除了第一个参数要求是char *以外,其余参数的类型不限,个数也不限。
从这一点能够看出,C语言对函数参数的数据类型是不做严格的检查的,
但是C++语言却是要做严格的类型检查的,这与C++支持函数重载有关。
4、
C++中其实也可以用printf,只不过可能会出一些问题,所以不提倡使用。
举例,在一个程序里,如果cin、cout和scanf、printf混合使用,
系统不能保证他们的执行次序是正确的,
假如我们希望输出‘你好’,也许输出的是‘好你’。