C格式的I/O函数(printf,sprintf等)是否比IOStream更受欢迎,如果是这样,为什么?

Rus*_*sel 16 c++ io outputstream

我最近一直在查看其他人编写的很多代码,并且碰巧注意到每个人都使用"printf"风格的C函数,但在学校学到的C++函数(特别是cout)似乎并不那么受欢迎.

这是一个有效的观察,是否有理由这样做?惯例?

谢谢,

[R

And*_*one 24

就个人而言,我使用printfiostream东西(比如cout)因为我觉得它更清楚.

当你进行格式化时iostream,你必须有<<各种各样的古怪,比如setiosflagssetf.我永远无法记住所有这些东西都存在于哪个命名空间中,更不用说它的全部功能了.即使我这样做,我也对代码的冗长和不直观感到失望.

格式化选项printf最初可能看起来难以辨认,但它们简洁明了,在单个手册页中有明确记录,并且适用于多种语言.

另一个优点是printf无状态:与cout我不同,我不需要记住已经调用了哪些成员函数printf,或者哪些拜占庭式的标志混合已被<<编入其中.这对可读性来说是一个很大的好处.

  • +1表示州与无国籍的区别.当你不必担心输出数据的尝试是否会相互依赖时,这真的是一件好事. (11认同)
  • 有一点需要指出的是,你可以使用`boost :: format`将printf样式的标志与C++字符串一起使用 (6认同)

Mhm*_*mmd 5

我认为味道是一个可能的原因.我个人觉得这个:

printf("%8d: %s\n", customer->id, customer->name);
Run Code Online (Sandbox Code Playgroud)

比这更具可读性:

std::cout << customer->id << ": " << customer->name << std::endl;
Run Code Online (Sandbox Code Playgroud)

本地化也存在问题.printf使得可以更改格式以适应其他语言和UI文化,这将成为一项主要的苦差事iostreams,除非您使用类似Boost格式库的东西.