std::println
From cppreference.com
| ヘッダ <print> で定義 |
||
| template< class... Args > void println( std::format_string<Args...> fmt, Args&&... args ); |
(1) | (C++23から) |
| template< class... Args > void println( std::FILE* stream, |
(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'), |
(C++26以降) |
3) std::println(stdout) と等価。
4) std::print(stream, "\n") と等価。
Args 内の任意の `Ti` に対して std::formatter<Ti, char> が BasicFormatter 要件を満たさない場合(std::make_format_args で要求されるように)、動作は未定義である。
目次 |
[編集] パラメーター
| stream | - | 書き込む出力ファイルストリーム | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
各置換フィールドは以下の形式を持つ。
1) フォーマット指定なしの置換フィールド
2) フォーマット指定ありの置換フィールド
| ||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | フォーマットする引数 | ||||||||||||||||||||||||||||||||||||||||||||||
[編集] 例外
- アロケーションに失敗した場合、std::bad_alloc。
- ストリームへの書き込みに失敗した場合、std::system_error。
- 使用されたフォーマッタによって投げられた例外(例:std::format_error)を伝播する。
[編集] 備考
オーバーロード (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 の公開 |
- ↑ 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またはファイルストリームに出力する (関数テンプレート) |
| (C++23) |
引数の書式化された表現に'\n'を付加して出力する (関数テンプレート) |
| (C++20) |
引数のフォーマット済み表現を新しい文字列に格納する (関数テンプレート) |
| (C++11) |
stdout、ファイルストリーム、またはバッファにフォーマットされた出力を書き込む (関数) |