神奇的C语言七:为什么C++要抛弃printf

2025-04-06 19:32:07
推荐回答(1个)
回答1:

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混合使用,

系统不能保证他们的执行次序是正确的,

假如我们希望输出‘你好’,也许输出的是‘好你’。