libfmt 和 std::format 之间有什么区别?

Wal*_*rus 7 c++ c++20 fmt

我知道 c++20 格式提案是libfmt部分的形式化,而 libfmt 是该形式化的兼容实现。但是,据我所知,libfmt 提供的功能超出了 c++20 标准中指定的功能。有哪些附加功能?

另外,主要编译器供应商是简单地包含 libfmt 的一个子集还是重新实现它?

Bar*_*rry 12

libfmt 中有很多不是 C++20 格式的东西:

  • fmt::print()直接打印到标准输出。这是在P2093 中提出的。fmt::printf()也存在但未在该论文中提出。
  • fmt::memory_buffer基本上是一个动态大小的容器,您可以将其格式化为 via fmt::format_to(buf, ...)
  • 支持格式化范围和元组,包括fmt::join().
  • 支持命名参数,fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23);
  • 编译时格式字符串通过 FMT_COMPILE

  • 我也不认为 [`fmt::color` 和 `fmt::emphasis`](https://godbolt.org/z/d9xxT6) 也在 C++20 中,但我很乐意错。:-) (2认同)