可能重复:
在C++ cin或printf中printf vs cout
?
我一直想知道printf和cout ..哪一个最终更快,并且它也是最灵活的(即可以打印一系列变量,输出可以格式化)?
PS我知道这看起来类似于C++中的'printf'和'cout',但我并不是真的在问同样的事情.
快点 : 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 ;
}
Run Code Online (Sandbox Code Playgroud)
流的问题在于,当想要指定某些数据的格式(例如,数字的填充空格)时,它们很难正确处理,有时,您确实需要快速进行.然后,要么回到printf,要么尝试一些高速C++替代品(想到FastFormat).
编辑:请注意,托马斯 '系列的测试显示有趣的结果(这是我现在转载我的电脑上),那就是:cout与printf有类似的表演时,一个避免使用std::endl(其刷新输出除了outputing一\n).
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |