我想知道“所有”C++ 格式化库最终是否都会回退到 *sprintf
函数来格式化数字。
我问这个是因为:
- 查看 Visual C++ 附带的 iostreams 库,我可以看到输入流中的数字最终将使用
sprintf_s
进行格式化。 - 据我所知,Boost.Format 仅使用可用的 iostreams 库。
- FastFormat最终使用
vsprintf
来格式化数字。
那么,是否存在不使用 *sprintf 并自行进行格式化的 iostream 实现?是否有其他格式库不将数字格式转发给 *sprintf 系列函数?
我希望得到以下形式的答案:
- 否:实现 XY 使用 ABC 来格式化数字
- 是的:所有其他(例如 iostreams)我知道的实现(X、Y、Z)也将数字格式转发到 stdio,因为......
请避免过度推测的答案。
最佳答案
Boost Spirit 不使用 *printf,从代码( real.hpp 和 int.hpp )和基准测试中可以看出,例如整数和 double 。
基准测试将 Boost Spirit Karma 的生成器与 Boost.Format 以及 sprintf 和 std::stringstream 进行比较。仅对于 gcc 编译器,sprintf 的性能在该基准测试中才接近。否则,Boost Spirit 是明显的赢家。
关于c++ - C++ 格式化库通常会回退到 *sprintf 进行数字格式化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684472/