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

exe*_*ook 0 c c++ printf

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

有时你会听到:

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

放弃使用printf()而改用 有cout <<什么好处?

hac*_*cks 5

C++ 常见问题说明:

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

提高类型安全性、减少错误、允许可扩展性并提供可继承性。printf() 可以说没有损坏,并且 scanf() 尽管容易出错,但可能是宜居的,但是两者在 C++ I/O 可以做什么方面都受到限制。C++ I/O(使用 << 和 >>)是相对于 C 的(使用printf()scanf())。

  • 更类型安全:使用<iostream>,编译器静态知道被 I/O 处理的对象类型。相反,使用“ %”字段来动态确定类型。

  • 不易出错:使用<iostream>,没有多余的“ %”标记必须与被 I/O 的实际对象一致。删除冗余会删除一类错误。

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

  • 可继承:C++<iostream>机制是从真实的类构建的,例如std::ostreamstd::istream。与<cstdio>'s不同FILE*,这些是真正的类,因此可以继承。这意味着您可以拥有其他用户定义的东西,它们的外观和行为都像流,但可以做任何你想做的奇怪和美妙的事情。您会自动使用由您甚至不认识的用户编写的无数行 I/O 代码,而且他们不需要知道您的“ extended stream”类。

  • +1 引用常见问题解答。希望更多的人首先搜索常见问题解答。 (2认同)