【发布时间】:2011-10-07 07:54:35
【问题描述】:
我想知道“所有”C++ 格式化库是否最终会退回到 *sprintf 函数来格式化数字。
我问这个是因为:
- 查看 Visual C++ 附带的 iostreams 库,我可以看到输入到流中的数字最终将被格式化为
sprintf_s。 - 据我所知,Boost.Format 只使用了可用的 iostreams 库。
-
FastFormat 最终使用
vsprintf来格式化数字。
那么,是否有 iostreams 实现不使用 *sprintf 并自己进行格式化?是否有其他格式库不将数字格式转发到 *sprintf 系列函数?
我希望得到以下形式的答案:
- 否:实现 XY 使用 ABC 来格式化数字
- 是的:所有其他(例如 iostream)我知道的实现(X、Y、Z)也将数字格式转发到 stdio,因为 ...
请避免过度投机的答案。
【问题讨论】:
-
这取决于实现。你怎么能期待一个结论性的答案,例如“是的,他们都这样做”?
-
所有内容都非常非常广泛,很难正确回答:可能总有一个陈述不成立。我更喜欢“所有其他我知道”的表述。
-
如果他们这样做了,我一点也不感到惊讶;格式化
double比乍一看要难得多。我这样说是因为我知道 Tcl(好吧,不是 C++)现在在正常情况下不会为此使用sprintf(),并且需要大量代码(包括完整的多精度算术库)来进行更改. -
有趣——这个问题是否广泛且难以正确回答取决于实际答案是什么。如果您碰巧知道一个反例,回答“否”很容易,回答“是”要么非常困难(涵盖所有重要的实现以及所有第三方字符串格式化库),要么非常主观,因为它取决于您碰巧知道哪些实现。
-
@sehe:是的,我认为您的回答证实了这是一个真实的问题。人们投票关闭的经典示例,因为他们不知道答案,因此假设无法回答,尽管这次有一些哲学基础;-)
标签: c++ formatting string-formatting iostream fastformat