我想知道“所有”C ++格式化库是否最终会回退到*sprintf
函数来格式化数字。
我问这个是因为:
sprintf_s
进行格式化。vsprintf
格式化数字。那么,是否存在不使用* sprintf的iostreams实现并自行进行格式化?是否有其他格式库可以不将数字格式转发到* sprintf函数系列?
我希望得到以下形式的答案:
请避免过度推测的答案。
答案 0 :(得分:4)
Boost Spirit不使用* printf,从代码(real.hpp和int.hpp)和基准测试中可以看出整数和双打。
基准测试将Boost Spirit Karma的生成器与针对sprintf和std :: stringstream的Boost.Format进行对比。仅对于gcc编译器而言,sprintf的性能接近于该基准测试。否则,提升精神是明显的赢家。
答案 1 :(得分:1)
不,至少this formatting library有自己的整数格式实现。它仅将snprintf
用于浮点数,但计划使用double-conversion以获得更好的性能。目前,根据this benchmark,该库的性能接近于printf的性能。我写了this blog post来解释如何在不牺牲类型安全的情况下实现这一点。
请注意,Boost Karma的基准测试有点误导,因为他们将printf
之类的格式与dtoa之类的双字符串转换进行比较。不同之处在于,前者使您可以更好地控制输出,并在运行时更多地处理格式规范。
免责声明:我是上述格式库的作者。