名稱空間
變體
操作

std::ios_base::sync_with_stdio

來自 cppreference.com
< cpp‎ | io‎ | ios_base
 
 
 
 
static bool sync_with_stdio( bool sync = true );

設定在每次輸入/輸出操作後,標準 C++ 流是否與標準 C 流同步。

標準 C++ 流包括:std::cinstd::coutstd::cerrstd::clogstd::wcinstd::wcoutstd::wcerrstd::wclog

標準 C 流包括:stdinstdoutstderr

對於與 C 流 f 同步的標準流 str,以下函式對具有相同的效果:

1) std::fputc(f, c)str.rdbuf()->sputc(c)
2) std::fgetc(f)str.rdbuf()->sbumpc()
3) std::ungetc(c, f)str.rdbuf()->sputbackc(c)

實際上,這意味著同步的 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
(全域性物件)[編輯]