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

What are the differences between libfmt and std::format?

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

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

libfmt 中有一堆不是 C++20 格式的东西:

  • fmt::print() 直接打印到标准输出。这是在 P2093 中提出的。 fmt::printf() 也存在,但未在该论文中提出。
  • fmt::memory_buffer 基本上是一个动态大小的容器,您可以通过 fmt::format_to(buf, ...).
  • 将其格式化为
  • 支持格式化 ranges and tuples,包括 fmt::join()
  • 支持named arguments喜欢fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23);
  • Compile-time 通过 FMT_COMPILE
  • 格式化字符串