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++ ストリームに対する各入出力操作が対応する C のストリームバッファに直ちに適用されることを意味します。 これにより C++ と C の入出力を自由に混ぜることができるようになります。
さらに、同期した C++ ストリームはスレッドセーフであることが保証されます (複数のスレッドから出力される個々の文字はインターリーブするかもしれませんが、データ競合は発生しません)。
同期をオフにすると、 C++ 標準ストリームは入出力を独立してバッファリングできるようになり、場合によっては相当に速くなることがあります。
デフォルトでは、8つの標準 C++ ストリームはすべてそれぞれの C ストリームと同期します。
標準ストリームに対して入出力が発生した後にこの関数が呼ばれた場合、動作は処理系定義です。 効果がない処理系からバッファを破棄する処理系まで様々です。
目次 |
[編集] 引数
sync | - | 新しい同期の設定 |
[編集] 戻り値
関数を呼ぶ前の同期の状態。
[編集] 例
Run this code
#include <iostream> #include <cstdio> int main() { std::ios::sync_with_stdio(false); std::cout << "a\n"; std::printf("b\n"); std::cout << "c\n"; }
出力例:
b a c
[編集] 関連項目
標準 C 出力ストリーム stdout に書き込みます (グローバルオブジェクト) | |
標準 C エラーストリーム stderr に書き込みます。 バッファリングされません (グローバルオブジェクト) | |
標準 C エラーストリーム stderr に書き込みます (グローバルオブジェクト) |