名前空間
変種
操作

std::println

From cppreference.com
< cpp‎ | io
 
 
 
 
ヘッダ <print> で定義
template< class... Args >
void println( std::format_string<Args...> fmt, Args&&... args );
(1) (C++23から)
template< class... Args >

void println( std::FILE* stream,

              std::format_string<Args...> fmt, Args&&... args );
(2) (C++23から)
void println();
(3) (C++26以降)
void println( std::FILE* stream );
(4) (C++26以降)

書式指定文字列 fmt にしたがって args を書式化し、末尾に '\n' を追加(出力が必ず改行で終わることを意味する)して、その結果をストリームに出力する。

1) std::println(stdout, fmt, std::forward<Args>(args)...) と等価。
2) 次の操作を行うのと等価

std::print(stream, "{}\n", std::format(fmt, std::forward<Args>(args)...));

(C++26まで)

std::print(stream, std::runtime_format(std::string(fmt.get()) + '\n'),
           std::forward<Args>(args)...)

(C++26以降)
3) std::println(stdout) と等価。
4) std::print(stream, "\n") と等価。

Args 内の任意の `Ti` に対して std::formatter<Ti, char>BasicFormatter 要件を満たさない場合(std::make_format_args で要求されるように)、動作は未定義である。

目次

[編集] パラメーター

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

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

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

フォーマット文字列内の arg-id は、すべて存在するか、すべて省略されなければならない。手動と自動のインデックス付けを混在させることはエラーである。

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

(C++23から)
(C++26以降)
  • その他のフォーマット可能な型の場合、フォーマット指定はユーザー定義の formatter 特殊化によって決定される。
args... - フォーマットする引数

[編集] 例外

[編集] 備考

オーバーロード (3,4) は C++26 で追加されたが、既知の実装はすべて C++23 モードで利用可能にしている。

機能テストマクロ 規格 機能
__cpp_lib_print 202207L (C++23) 書式付き出力
202403L (C++26) バッファなし書式設定出力[1]
__cpp_lib_format 202207L (C++23) std::basic_format_string の公開
  1. P3107R5 は DR として受理されたが、std::runtime_format は C++26 からしか利用できない。結果として、この解決策は C++23 では適用できない。

[編集]

#include <print>
 
int main()
{
    // Each call to std::println ends with new-line
    std::println("Please"); // overload (1)
    std::println("enter"); // (1)
 
    std::print("pass");
    std::print("word");
 
    std::println(); // (3); valid since C++26; same effect as std::print("\n"); 
}

出力

Please
enter
password
 

[編集] 関連項目

(C++23)
引数の書式化された表現を用いて、stdoutまたはファイルストリームに出力する
(関数テンプレート) [編集]
引数の書式化された表現に'\n'を付加して出力する
(関数テンプレート) [編集]
(C++20)
引数のフォーマット済み表現を新しい文字列に格納する
(関数テンプレート) [編集]
stdout、ファイルストリーム、またはバッファにフォーマットされた出力を書き込む
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)