我知道c++20格式化提案是libfmt的一部分的正式化,而libfmt是其规范实现。但据我了解,libfmt提供了超出c++20标准规定的其他功能。这些额外的功能是什么?
另外,主要的编译器厂商是只包含libfmt的一个子集还是重新实现它?
在libfmt中有许多东西不在C++20格式中:
fmt::print()
可以直接将输出打印到stdout。fmt::memory_buffer
是一种动态大小的容器,可以通过 fmt::format_to(buf, ...)
进行格式化操作。fmt::join()
。fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23);
FMT_COMPILE
进行编译时格式字符串处理,不过 fmt::format
和 C++20 的 std::format
都默认支持编译时格式字符串处理。同时,fmt::format
有一个名为 fmt::runtime
的转义钩子,而 std::format
则没有这个功能。std::print
(P2093) 和格式化范围和元组 (P2286)。
fmt::color
和fmt::emphasis
,但我很希望我是错的。 :-) - Ted Lyngmostring_view
字面量作为FMT_COMPILE
的替代吗? - Emile Cormierstring_view
字面量作为格式字符串传递时,C++20实现是否能执行与FMT_COMPILE
相同类型的优化? - Emile Cormier