哪个更快,哪个更灵活:printf或cout?

时间:2010-09-04 20:06:57

标签: c++ printf cout

  

可能重复:
  printf vs cout in C++
  cin or printf??

我一直想知道printf和cout ..哪一个最终更快,并且它也是最灵活的(即可以打印一系列变量,输出可以格式化)?

P.S。 我知道这看起来与'printf' vs. 'cout' in C++相似,但我并不是真的在问同样的事情。

2 个答案:

答案 0 :(得分:7)

简答

更快:printf

更灵活:cout

答案很长

与sprintf系列相比,C ++流应该更慢(如果我记得Herb Sutter的一个Exceptional C ++项目则为6)。尽管如此,大多数情况下,您不需要这种速度,但您需要确保您的代码不会被窃听。

使用printf系列函数很容易出错,无论是错误的参数数量,错误的类型,还是在代码中引入潜在的安全漏洞(%n说明符)。

除非真的想要它(然后,它被称为破坏),否则几乎不可能弄错C ++流。它们无缝地处理所有已知类型(内置函数,std :: strings等),并且很容易扩展它。例如,假设我有一个对象“Coordinate3D”,我想要打印出它的数据:

#include <iostream>

struct Coordinate3D
{
    int x ;
    int y ;
    int z ;
} ;

std::ostream & operator << (std::ostream & p_stream
                          , const Coordinate3D & p_c)
{
    return p_stream << "{ x : " << p_c.x
                   << " , y : " << p_c.y
                   << " , z : " << p_c.z << " }" ;
}

int main(int argc, char * argv[])
{
    Coordinate3D A = {25,42,77} ;
    std::cout << A << std::endl ;
          // will print "{ x : 25 , y : 42 , z : 77 }"
    return 0 ;
}

流的问题在于,当想要指定某些数据的格式(例如,数字的填充空格)时,它们很难正确处理,有时候,你真的需要快速进行。然后,要么回到printf,要么尝试一些高速C ++替代方案(FastFormat会想到)。

编辑:请注意,Thomas'系列测试显示了有趣的结果(我现在在我的计算机上重现),即: cout和{ {1}}在避免使用printf 时会有类似的效果(除了输出std::endl之外,还会刷新输出)。

答案 1 :(得分:3)

  • 更快:printf
  • 更多类型安全和可扩展:cout
  • 更好:取决于!我更喜欢printf

I'm not alone认为C ++的cout格式化的方式只是史诗般的失败。