c++ - C++ 格式化库通常会回退到 *sprintf 进行数字格式化吗?

标签 c++ formatting string-formatting iostream fastformat

我想知道“所有”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.hppint.hpp )和基准测试中可以看出,例如整数和 double 。

基准测试将 Boost Spirit Karma 的生成器与 Boost.Format 以及 sprintf 和 std::stringstream 进行比较。仅对于 gcc 编译器,sprintf 的性能在该基准测试中才接近。否则,Boost Spirit 是明显的赢家。

enter image description here

关于c++ - C++ 格式化库通常会回退到 *sprintf 进行数字格式化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684472/

相关文章:

c 和格式化输出

java - 在java中将日期从字符串转换为oracle.jbo.domain.Date

powershell - 在 PowerShell 中将十六进制转换为 ASCII

c++ - 谁对谁错又名 GCC vs Visual Studio

c++ - g++ ifstream 的类型不完整,存在正确的头文件

python - pandas DataFrame 中的自定义浮点格式

r - 在 dplyr 中使用 mutate_all 格式化所有列

c++ - QMediaPlayer 给我有关视频的错误信息

c++ - 在 mac 中创建 dylib 在 python 中导入

c# - 如果语句突然被 Visual Studio 2010 在下一行格式化