C++ 命名要求: FormattedOutputFunction
來自 cppreference.com
目錄 |
[編輯] 要求
FormattedOutputFunction 是執行以下操作的流輸出函式:
- 構造一個具有自動儲存期的 basic_ostream::sentry 型別物件,該物件執行以下操作:
- 如果輸出流上設定了 eofbit 或 badbit,則也設定
failbit
,並且如果此輸出流的 異常掩碼 中啟用了failbit
上的異常((exceptions() & failbit) != 0),則丟擲 ios_base::failure。 - 如果適用,重新整理 tie() 的輸出流。
- 如果輸出流上設定了 eofbit 或 badbit,則也設定
- 透過呼叫
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 的格式化輸出函式確定填充,它將按如下方式進行。 給定一個 如果 (os.flags() & std::ios_base::adjustfield) == std::ios_base::left 為 true,則填充字元放置在字元序列之後;否則,它們放置在字元序列之前。 |
(C++14 起) |
[編輯] 標準庫
以下標準庫函式是 FormattedOutputFunctions。
- basic_ostream::operator<<(std::basic_ostream&, int / long / double / void* / bool)
- operator<<(std::basic_ostream&, char)
- operator<<(std::basic_ostream&, char*)
- operator<<(std::basic_ostream&, const std::bitset&)
- operator<<(std::basic_ostream&, const std::basic_string&)
-
operator<<
,當對 std::put_money 的返回值呼叫時
(C++17 起) |
|
(C++23 起) |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 160 | C++98 | 確定捕獲的異常是否重新丟擲的過程 提到了一個不存在的函式 exception() |
更正為 exceptions() |
LWG 165 | C++98 | 唯一允許對 rdbuf() 呼叫的虛成員是 overflow() |
也允許xsputn() 和 sync() |