Namespaces
Variants

std:: vformat

From cppreference.net
ヘッダーで定義 <format>
(1) (C++20以降)
(2) (C++20以降)
(3) (C++20以降)
(4) (C++20以降)

args に保持されている引数を、書式文字列 fmt に従ってフォーマットし、結果を文字列として返します。存在する場合、 loc はロケール固有のフォーマットに使用されます。

目次

パラメータ

fmt - フォーマット文字列を表すオブジェクト。フォーマット文字列は以下から構成される:
  • 通常の文字( { } を除く)は変更されずに出力にコピーされる
  • エスケープシーケンス { { } } は、出力ではそれぞれ { } に置き換えられる
  • 置換フィールド

各置換フィールドは以下の形式を持つ:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) フォーマット指定なしの置換フィールド
2) フォーマット指定ありの置換フィールド
arg-id - フォーマットに使用する args 内の引数のインデックスを指定する。省略された場合、引数は順番に使用される。

フォーマット文字列内の arg-id はすべて存在するか、すべて省略する必要がある。手動インデックスと自動インデックスの混合はエラーである。

format-spec - 対応する引数に対する std::formatter 特殊化によって定義されるフォーマット仕様。 } で始まることはできない。

(C++23以降)
(C++26以降)
  • その他のフォーマット可能な型の場合、フォーマット仕様はユーザー定義の formatter 特殊化によって決定される。
args - フォーマットする引数
loc - ロケール固有のフォーマットに使用される std::locale

戻り値

フォーマットされた結果を保持する文字列オブジェクト。

例外

以下の場合にスローする: std::format_error - fmt が指定された引数に対して有効なフォーマット文字列でない場合、または std::bad_alloc - メモリ確保に失敗した場合。また、フォーマッタ操作やイテレータ操作で発生した例外を伝播する。

#include <format>
#include <iostream>
template<typename... Args>
inline void println(const std::format_string<Args...> fmt, Args&&... args)
{
    std::cout << std::vformat(fmt.get(), std::make_format_args(args...)) << '\n';
}
int main()
{
    println("{}{} {}{}", "Hello", ',', "C++", -1 + 2 * 3 * 4);
}

出力:

Hello, C++23

関連項目