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
格式化字符串
我知道 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
格式化字符串