C++ 命名需求: UnformattedOutputFunction
來自 cppreference.com
[編輯] 要求
UnformattedOutputFunction 是一個流輸出函式,它執行以下操作:
1) 構造一個具有自動儲存期的 basic_ostream::sentry 型別的物件,該物件執行以下操作:
- 如果輸出流上設定了 eofbit 或 badbit,則也設定 failbit,並且如果此輸出流的 異常掩碼 中啟用了對
failbit
的異常((exceptions() & failbit) != 0),則丟擲 ios_base::failure。 - 如果適用,重新整理 tie() 的輸出流。
2) 透過呼叫
sentry::operator bool()
檢查崗位的狀態,這等價於 basic_ios::good。- 如果運算子返回 false 或哨兵的建構函式丟擲異常,則不會發生輸出。
- 如果運算子返回 true,則嘗試透過將字元插入輸出流來執行所需的輸出,如同呼叫 rdbuf()->sputc()。還可以使用 std::basic_ostream 的其他公共成員,但除了 overflow()、xsputn() 和 sync() 之外,rdbuf() 的虛成員將永遠不會被呼叫。
- 如果在輸出期間丟擲異常,則在輸出流中設定
badbit
。如果此流的 異常掩碼 中啟用了對badbit
的異常((exceptions() & badbit) != 0),則該異常也會被重新丟擲。 - 如果沒有丟擲異常,則返回函式指定的值。
- 如果在輸出期間丟擲異常,則在輸出流中設定
3) 在任何情況下,無論是因異常終止還是返回,哨兵的解構函式都會在此函式離開之前被呼叫。
[編輯] 標準庫
以下標準庫函式是 UnformattedOutputFunctions。
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(C++11 起) |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 63 | C++98 | 異常處理策略缺失 | 已新增 |
LWG 160 | C++98 | 確定捕獲的異常是否重新丟擲的過程 提到了一個不存在的函式 exception() |
更正為 exceptions() |
LWG 165 | C++98 | 唯一允許被呼叫的虛成員 在 rdbuf() 上是 overflow() |
也允許xsputn() 和 sync() |