名稱空間
變體
操作

C++ 命名要求: FormattedOutputFunction

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
FormattedOutputFunction(格式化輸出函式)
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

目錄

[編輯] 要求

FormattedOutputFunction 是執行以下操作的流輸出函式:

  • 如果輸出流上設定了 eofbitbadbit,則也設定 failbit,並且如果此輸出流的 異常掩碼 中啟用了 failbit 上的異常((exceptions() & failbit) != 0),則丟擲 ios_base::failure
  • 如果適用,重新整理 tie() 的輸出流。
  • 透過呼叫 sentry::operator bool() 檢查崗哨的狀態,這等效於 basic_ios::good
  • 如果崗哨返回 false 或崗哨的建構函式丟擲異常,則不進行輸出。
  • 如果崗哨返回 true,則嘗試透過將字元插入輸出流來執行所需的輸出,如同透過呼叫 rdbuf()->sputc()。還可以使用 std::basic_ostream 的其他公共成員,但除了 overflow()xsputn()sync() 之外,rdbuf() 的虛成員永遠不會被呼叫。
  • 如果無法生成輸出,則設定 failbit。如果此流的 異常掩碼 中啟用了 failbit 上的異常((exceptions() & failbit) != 0),則丟擲 ios_base::failure
  • 如果在輸出期間丟擲異常,則在輸出流中設定 badbit。如果此流的 異常掩碼 中啟用了 badbit 上的異常((exceptions() & badbit) != 0),則該異常也會被重新丟擲。
  • 如果沒有丟擲異常,則返回 *this
  • 無論如何,無論是透過異常終止還是返回,崗哨的解構函式都會在此函式退出之前被呼叫。

[編輯] 填充

格式化輸出函式根據 std::num_put::do_put() 階段 3 確定填充。

(直到 C++14)

如果流 os 的格式化輸出函式確定填充,它將按如下方式進行。

給定一個 CharT 字元序列 seq,其中 CharTos字元容器型別,如果 seq 的長度小於 os.width(),則根據需要向此序列新增足夠多的 os.fill() 副本,以填充到 os.width() 個字元的寬度。

如果 (os.flags() & std::ios_base::adjustfield) == std::ios_base::lefttrue,則填充字元放置在字元序列之後;否則,它們放置在字元序列之前。

(C++14 起)

[編輯] 標準庫

以下標準庫函式是 FormattedOutputFunctions

(C++17 起)
但(給定 os 是一個輸出流物件)
  • 呼叫 std::vformat 丟擲的任何異常都會被傳播,而不管 os.exceptions() 的值,並且不會在 os 的錯誤狀態中開啟 ios_base::badbit
  • 如果插入 os 失敗,則呼叫 os.setstate(ios_base::badbit)(這可能會丟擲 ios_base::failure)。
(C++23 起)

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 160 C++98 確定捕獲的異常是否重新丟擲的過程
提到了一個不存在的函式 exception()
更正為 exceptions()
LWG 165 C++98 唯一允許對
rdbuf() 呼叫的虛成員是 overflow()
也允許
xsputn()sync()