名前空間
変種
操作

std::ios_base::sync_with_stdio

提供: cppreference.com
< cpp‎ | io‎ | ios base
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
 
static bool sync_with_stdio( bool sync = true );

標準 C++ ストリームが各入出力操作後に標準 C ストリームと同期するかどうか設定します。

標準 C++ ストリームとは std::cinstd::coutstd::cerrstd::clogstd::wcinstd::wcoutstd::wcerr および std::wclog のことです。

標準 C ストリームとは stdinstdout および stderr のことです。

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++ ストリームに対する各入出力操作が対応する C のストリームバッファに直ちに適用されることを意味します。 これにより C++ と C の入出力を自由に混ぜることができるようになります。

さらに、同期した C++ ストリームはスレッドセーフであることが保証されます (複数のスレッドから出力される個々の文字はインターリーブするかもしれませんが、データ競合は発生しません)。

同期をオフにすると、 C++ 標準ストリームは入出力を独立してバッファリングできるようになり、場合によっては相当に速くなることがあります。

デフォルトでは、8つの標準 C++ ストリームはすべてそれぞれの C ストリームと同期します。

標準ストリームに対して入出力が発生した後にこの関数が呼ばれた場合、動作は処理系定義です。 効果がない処理系からバッファを破棄する処理系まで様々です。

目次

[編集] 引数

sync - 新しい同期の設定

[編集] 戻り値

関数を呼ぶ前の同期の状態。

[編集]

#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 に書き込みます
(グローバルオブジェクト) [edit]
標準 C エラーストリーム stderr に書き込みます。 バッファリングされません
(グローバルオブジェクト) [edit]
標準 C エラーストリーム stderr に書き込みます
(グローバルオブジェクト) [edit]