名稱空間
變體
操作

std::println

來自 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")

如果 std::formatter<Ti, char> 對於 Args 中的任何 Ti 不滿足 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、檔案流或緩衝區
(函式) [編輯]