std::enable_nonlocking_formatter_optimization
| ヘッダー <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<> constexpr bool enable_nonlocking_formatter_optimization<CharT> = true; |
(1) | |
| 文字列フォーマッタの非ロックフラグ |
||
| template<> constexpr bool enable_nonlocking_formatter_optimization<CharT*> = true; |
(2) | |
| template<> 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<> constexpr bool enable_nonlocking_formatter_optimization<ArithmeticT> = true; |
(7) | |
| ポインタフォーマッタの非ロックフラグ |
||
| template<> constexpr bool enable_nonlocking_formatter_optimization<std::nullptr_t> = true; |
(8) | |
| template<> constexpr bool enable_nonlocking_formatter_optimization<void*> = true; |
(9) | |
| template<> 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) |
std::printと同じだが、各出力の末尾に改行が追加される点が異なる (関数テンプレート) |