Formatting library (since C++20)
テキストフォーマットライブラリは、printfファミリーの関数に対する安全で拡張可能な代替手段を提供します。これは既存のC++ I/Oストリームライブラリを補完することを目的としています。
目次 |
フォーマット仕様
フォーマット仕様は、様々な種類のオプションでオブジェクトがどのようにフォーマットされるかを指定します。
基本型および標準文字列型のオブジェクトの書式設定には、 基本書式指定 が使用されます。その他のライブラリコンポーネントも独自の書式指定を提供する場合があり、詳細は こちら を参照してください。
フォーマット関数
|
ヘッダーで定義
<format>
|
|
|
(C++20)
|
引数のフォーマットされた表現を新しい文字列に格納する
(関数テンプレート) |
|
(C++20)
|
出力イテレータを通じて引数のフォーマットされた表現を書き出す
(関数テンプレート) |
|
(C++20)
|
出力イテレータを通じて引数のフォーマットされた表現を書き出す(指定サイズを超えない)
(関数テンプレート) |
|
(C++20)
|
引数のフォーマットされた表現を格納するために必要な文字数を決定する
(関数テンプレート) |
フォーマット文字列
|
定義済みヘッダー
<format>
|
|
|
(C++20)
(C++20)
(C++20)
|
構築時にコンパイル時フォーマット文字列チェックを実行するクラステンプレート
(クラステンプレート) |
|
(C++26)
|
ユーザー向けフォーマット関数で直接使用可能なランタイムフォーマット文字列を作成する
(関数) |
フォーマット概念
|
定義済みヘッダー
<format>
|
|
|
(C++23)
|
型がフォーマット可能であること、すなわち
std::formatter
を特殊化し、メンバー関数
parse
および
format
を提供することを指定する
(コンセプト) |
拡張性サポートと実装詳細
|
ヘッダーで定義
<format>
|
|
|
(C++20)
|
型消去された引数表現を使用する
std::format
の非テンプレート版
(関数) |
|
(C++20)
|
型消去された引数表現を使用する
std::format_to
の非テンプレート版
(関数テンプレート) |
|
(C++20)
(C++20)
|
すべての書式化引数を参照する型消去オブジェクトを作成し、
format_args
に変換可能にする
(関数テンプレート) |
|
(C++20)
(C++26で非推奨)
|
ユーザー定義フォーマッタのための引数ビジットインターフェース
(関数テンプレート) |
|
(C++20)
|
指定された型の書式化ルールを定義する
(クラステンプレート) |
|
(C++23)
|
範囲型に対する
std::formatter
特殊化の実装を支援するクラステンプレート
(クラステンプレート) |
|
引数型が効率的に出力できることを示す
(変数テンプレート) |
|
|
(C++23)
|
範囲をどのように書式化するかを指定する
(列挙型) |
|
(C++23)
|
範囲に適した
std::range_format
を選択する
(変数テンプレート) |
|
(C++20)
|
ユーザー定義フォーマッタのための書式化引数へのアクセスを提供するクラステンプレート
(クラステンプレート) |
|
(C++20)
(C++20)
(C++20)
|
すべての書式化引数へのアクセスを提供するクラス
(クラステンプレート) |
|
(C++20)
(C++20)
(C++20)
|
すべての書式化引数と出力イテレータを含む書式化状態
(クラステンプレート) |
|
(C++20)
(C++20)
(C++20)
|
書式化文字列の解析状態
(クラステンプレート) |
|
(C++20)
|
書式化エラー時にスローされる例外型
(クラス) |
ヘルパーアイテム (since C++23)
|
template
<
class
R,
class
CharT
>
concept
/*const-formattable-range*/
=
|
(1) | ( 説明専用* ) |
|
template
<
class
R,
class
CharT
>
using
/*fmt-maybe-const*/
=
|
(2) | ( 説明専用* ) |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 | |
|---|---|---|---|---|
__cpp_lib_format
|
201907L
|
(C++20) | テキストフォーマット | |
202106L
|
(C++23)
(DR20) |
コンパイル時フォーマット文字列チェック;
std::vformat_to のパラメータ化の削減 |
||
202110L
|
(C++23)
(DR20) |
chronoフォーマッタのロケール処理の修正;
非constフォーマット可能な型のサポート |
||
202207L
|
(C++23)
(DR20) |
std::basic_format_string
の公開;
chrono型のローカライズされたフォーマットにおけるエンコーディング処理の明確化 |
||
202304L
|
(C++26) | ポインタのフォーマット | ||
202305L
|
(C++26) | フォーマット引数の型チェック | ||
202306L
|
(C++26) |
メンバ関数
std::basic_format_arg::visit
|
||
202311L
|
(C++26) | 実行時フォーマット文字列 | ||
202403L
|
(C++26) | std::println による空白行の出力 | ||
202403L
|
(C++26)
(DR23) |
std::print
の効率的な実装の許可
|
||
__cpp_lib_format_ranges
|
202207L
|
(C++23) | 範囲のフォーマット | |
__cpp_lib_format_path
|
202403L
|
(C++26) | std::filesystem::path のフォーマット | |
__cpp_lib_format_uchar
|
202311L
|
(C++26) | コードユニットの整数としてのフォーマットの修正 | |
__cpp_lib_formatters
|
202302L
|
(C++23) | std::thread::id と std::stacktrace のフォーマット |
我々は意図的に
std::basic_format_string
(
P2508
) の追加を欠陥報告として扱います。公式にはそのように分類されていませんが、既知のすべての実装がこれらのコンポーネントをC++20モードで利用可能にしているためです。
例
#include <cassert> #include <format> int main() { std::string message = std::format("The answer is {}.", 42); assert(message == "The answer is 42."); }
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2418R2 | C++20 |
const-formattableでもcopyableでもないオブジェクト
(ジェネレータのようなオブジェクト)はformattableではない |
これらのオブジェクトのフォーマットを許可
(フォーマッタ要件の緩和) |
| P2508R1 | C++20 | この機能に対するユーザー可視名が存在しない |
basic_format_string
という名前が公開される
|
関連項目
|
(C++23)
|
引数の
フォーマット済み
表現を使用して
stdout
またはファイルストリームに出力する
(関数テンプレート) |
|
(C++23)
|
std::print
と同じだが、各出力が追加の改行で終了する
(関数テンプレート) |
|
(C++23)
|
引数の
フォーマット済み
表現を出力する
(関数テンプレート) |