std::enable_nonlocking_formatter_optimization
来自cppreference.com
| 在标头 <format> 定义
|
||
| template< class T > constexpr bool enable_nonlocking_formatter_optimization = false; |
(C++23 起) | |
实现可以通过此模板判断是否可以启用 std::print 和 std::println 的高效实现。
如果 std::enable_nonlocking_formatter_optimization<T> 是 true,那么打印 T 类型的实参可以通过高效的方式进行(详情见 std::print)。std::enable_nonlocking_formatter_optimization 的特化在以下情况下可以是 true:
-
T是使得 std::formatter<T, CharT> 是基本的标准特化或库类型的标准特化的类型之一(见下文)。 - 程序可以对任何无 cv 限定的由程序定义的类型
T特化此模板。此类特化必须可用于常量表达式并具有 const bool 类型。
基本的标准特化
以下列表中,CharT 是 char 或 wchar_t,ArithmeticT 是除了 char、wchar_t、char8_t、char16_t 或 char32_t 之外的任何无 cv 限定的算术类型:
| 字符格式化器对应的无锁标志 |
||
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<CharT> = true; |
(1) | |
| 字符串格式化器对应的无锁标志 |
||
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<CharT*> = true; |
(2) | |
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<const CharT*> = true; |
(3) | |
| template< std::size_t N > constexpr bool enable_nonlocking_formatter_optimization<CharT[N]> = true; |
(4) | |
| template< class Traits, class Alloc > constexpr bool enable_nonlocking_formatter_optimization |
(5) | |
| template< class Traits > constexpr bool enable_nonlocking_formatter_optimization |
(6) | |
| 算术格式化器对应的无锁标志 |
||
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<ArithmeticT> = true; |
(7) | |
| 指针格式化器对应的无锁标志 |
||
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<std::nullptr_t> = true; |
(8) | |
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<void*> = true; |
(9) | |
| template<> inline constexpr bool enable_nonlocking_formatter_optimization<const void*> = true; |
(10) | |
库类型的标准特化
enable_nonlocking_formatter_optimization 针对下列标准模板的所有特化的特化均被定义为 true。
- std::chrono::zoned_time,当其模板形参类型
TimeZonePtr为 const std::chrono::time_zone* 时
enable_nonlocking_formatter_optimization 针对下列标准模板的所有特化的特化均被定义为根据条件为 true:
enable_nonlocking_formatter_optimization 针对范围格式种类并非 std::range_format::disabled 的所有可格式化范围类型的特化总是被定义为 false。
注解
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_print |
202403L | (C++26) (DR23) |
进行流锁定的格式化输出 |
| 202406L | (C++26) (DR23) |
启用更多可格式化类型的非锁定格式化器优化 |
参阅
| (C++20) |
定义针对给定类型的格式化规则 (类模板) |
| (C++23) |
将参数的格式化表达输出到 stdout 或文件缓冲区 (函数模板) |
| (C++23) |
将参数的格式化表达输出到 stdout 或文件缓冲区,输出完成后换行 (函数模板) |