【发布时间】:2020-08-25 20:39:09
【问题描述】:
我知道 c++20 格式提案是 libfmt parts 的形式化,并且 libfmt 是该形式化的兼容实现。但是,据我了解,libfmt 提供了超出 c++20 标准中指定的附加功能。有哪些附加功能?
另外,主要的编译器供应商是简单地包含 libfmt 的子集还是重新实现它?
【问题讨论】:
我知道 c++20 格式提案是 libfmt parts 的形式化,并且 libfmt 是该形式化的兼容实现。但是,据我了解,libfmt 提供了超出 c++20 标准中指定的附加功能。有哪些附加功能?
另外,主要的编译器供应商是简单地包含 libfmt 的子集还是重新实现它?
【问题讨论】:
libfmt 中有一堆不是 C++20 格式的东西:
fmt::print() 直接打印到标准输出。这是在P2093 中提出的。 fmt::printf() 也存在,但未在该论文中提出。fmt::memory_buffer 基本上是一个动态大小的容器,您可以通过 fmt::format_to(buf, ...) 格式化。fmt::join()。fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23);
FMT_COMPILE 编译时格式字符串
【讨论】:
fmt::color and fmt::emphasis 在 C++20 中,但我很想错。 :-)
string_view 文字代替 FMT_COMPILE?
string_view 文字作为格式字符串传递时,C++20 实现是否可以执行与 FMT_COMPILE 相同的优化?