首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C格式的I/O函数(printf、sprintf等)是否比IOStream更流行,如果是,为什么?

C格式的I/O函数(printf、sprintf等)是否比IOStream更流行,如果是,为什么?
EN

Stack Overflow用户
提问于 2010-08-29 09:09:18
回答 5查看 2.2K关注 0票数 17

我最近看了很多别人写的代码,碰巧注意到每个人都经常使用"printf“风格的C函数,但在学校里学到的C++函数(尤其是cout)似乎并不那么受欢迎。

这是一个有效的观察结果,这是有原因的吗?约定?

谢谢,

R

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-29 09:21:16

就我个人而言,我使用printf而不是iostream的东西(比如cout),因为我认为它更清晰。

当你使用iostream进行格式化时,你必须像setiosflagssetf这样的<<各种奇怪的东西。我永远记不住所有这些东西所在的名称空间,更不用说它们都做了什么。即使我这样做了,我也会对代码的冗长和不直观感到失望。

printf的格式化选项乍一看可能难以辨认,但它们非常简洁,在单个手册页中清楚地记录了内容,并且适用于多种语言。

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

票数 25
EN

Stack Overflow用户

发布于 2010-08-29 09:22:05

我认为品味是一个可能的原因。我个人认为:

代码语言:javascript
复制
printf("%8d: %s\n", customer->id, customer->name);

比这个更具可读性:

代码语言:javascript
复制
std::cout << customer->id << ": " << customer->name << std::endl;

还有本地化的问题。printf使更改格式以适应其他语言和UI区域性成为可能,除非您使用像Boost Format库这样的库,否则这将成为iostreams的主要工作。

票数 6
EN

Stack Overflow用户

发布于 2010-08-29 09:16:48

有一些对标准流系统的批评--最值得注意的是,它的性能通常不如C的系统,而且它们不允许对要格式化的项进行重新排序,这会使本地化变得更加困难。

就我个人而言,我几乎所有事情都使用流,因为它们允许我将函数写入控制台、文件或字符串,而不必修改函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3593135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档