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

时间:2014-01-15 17:59:10

标签: c++ c printf

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

有时您可以听到:

  

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

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

2 个答案:

答案 0 :(得分:3)

C++ faq声明:

  

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

     

提高类型安全性,减少错误,允许可扩展性并提供可继承性。   printf()可以说是没有被破坏,尽管容易出错,但scanf()可能是适合居住的,但两者都受限于C ++ I / O可以做什么。 C ++ I / O(使用&lt;&lt;&lt;&gt;&gt;)相对于C(使用printf()scanf())。

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

  •   
  • 不易出错:使用<iostream>时,没有冗余的“%”令牌必须与I / O的实际对象保持一致。删除冗余会消除一类错误。

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

  •   
  • 可继承:C ++ <iostream>机制是从真实的类构建的,例如std::ostreamstd::istream。与<cstdio>的{​​{1}}不同,这些是真正的类,因此是可继承的。这意味着你可以拥有其他用户定义的东西,它们看起来像溪流一样,但它可以做你想要的任何奇怪和奇妙的事情。您可以自动使用由您甚至不知道的用户编写的数以万计的I / O代码行,并且他们不需要知道您的“FILE*”类。

  •   

答案 1 :(得分:3)

cout更加面向对象并提供了一些优势。但我是一名老派开发人员,对printf()非常满意。虽然,我现在不写很多控制台应用程序,如果我这样做,我可能会使用printf()

这是一个很好的事情:你可以选择你最喜欢的那个。