std::ios_base::sync_with_stdio
來自 cppreference.com
static bool sync_with_stdio( bool sync = true ); |
||
設定在每次輸入/輸出操作後,標準 C++ 流是否與標準 C 流同步。
標準 C++ 流包括:std::cin、std::cout、std::cerr、std::clog、std::wcin、std::wcout、std::wcerr 和 std::wclog。
標準 C 流包括:stdin、stdout 和 stderr。
對於與 C 流 f 同步的標準流 str,以下函式對具有相同的效果:
實際上,這意味著同步的 C++ 流是無緩衝的,並且對 C++ 流的每個 I/O 操作都會立即應用於相應的 C 流的緩衝區。這使得 C++ 和 C I/O 可以自由混合。
此外,同步的 C++ 流保證是執行緒安全的(來自多個執行緒的單個字元輸出可能會交錯,但不會發生資料競爭)。
如果關閉同步,C++ 標準流可以獨立緩衝其 I/O,這在某些情況下可能會快得多。
預設情況下,所有八個標準 C++ 流都與其各自的 C 流同步。
如果在標準流上發生 I/O 後呼叫此函式,則行為是實現定義的:實現範圍從無效果到銷燬讀取緩衝區。
目錄 |
[編輯] 引數
sync | - | 新的同步設定 |
[編輯] 返回值
呼叫函式前的同步狀態。
[編輯] 示例
執行此程式碼
#include <cstdio> #include <iostream> int main() { std::ios::sync_with_stdio(false); std::cout << "a\n"; std::printf("b\n"); std::cout << "c\n"; }
可能的輸出
b a c
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 49 | C++98 | 未指定 (1) 實際返回哪個狀態以及 (2) 標準 C 和 C++ 流之間的“同步”意味著什麼 |
兩者都已指定 |
[編輯] 另請參閱
寫入標準 C 輸出流 stdout (全域性物件) | |
寫入標準 C 錯誤流 stderr,無緩衝 (全域性物件) | |
寫入標準 C 錯誤流 stderr (全域性物件) |