为什么不在C++中使用printf()

2022-02-25 00:00:00 c printf c++

我们中的许多人在学习使用构造函数和析构函数之前很久就学会了使用printf()。因此,当切换到C++时,许多人会坚持使用printf()作为控制台输出。

有时您可以听到:

printf()不好,您应该改用cout <<,因为它是C++

放弃使用printf()并切换到cout <<有什么好处?


解决方案

C++ faq说明:

[15.1]为什么要使用<iostream>而不是传统的<cstdio>

提高类型安全性、减少错误、允许可扩展性并提供可继承性。 printf()可以说没有被破坏,尽管scanf()容易出错,但它可能是合适的,但是两者在C++I/O的功能方面都是有限的。C++I/O(使用<;<;and>>)相对于C(使用printf()scanf())。

  • 更具类型安全性:使用<iostream>,编译器静态地知道I/O对象的类型。相反,使用"%"字段动态计算类型。

  • 较不容易出错:使用<iostream>,不存在必须与I/O的实际对象一致的冗余"%"令牌。删除冗余消除了一类错误。

  • 可扩展性:C++<iostream>机制允许在不破坏现有代码的情况下I/O新的用户定义类型。想象一下,如果每个人都同时向printf()和scanf()添加新的不兼容的"%"字段?!

  • 可继承:C++<iostream>机制由std::ostreamstd::istream等真实类构建而成。与<cstdio>FILE*不同,这些是真实的类,因此是可继承的。这意味着您可以拥有其他用户定义的内容,它们的外观和行为类似于流,但它们可以做您想做的任何奇怪和奇妙的事情。您可以自动使用由您甚至不认识的用户编写的无数行I/O代码,并且他们不需要知道您的"extended stream"类。

    /li>

相关文章