Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

13.3.10 iostreamstdio の併用

C++ プログラムでも stdio を使用できますが、プログラムで iostreamstdio とを標準ストリームとして併用すると、問題が起こる場合があります。たとえば stdoutcout の両方に書き込んだ場合、個別にバッファリングされるため出力結果が設計したとおりにならないことがあります。stdincin の両方から入力した場合、問題はさらに深刻です。個別にバッファリングされるため、入力データが使用できなくなっている可能性があります。

標準入力、標準出力、標準エラーに関するこのような問題を解決するためには、入出力を実行する前に次の命令を使用します。次の命令で、すべての定義済み iostream が、それぞれ対応する定義済み stdio FILE に結合されます。

ios::sync_with_stdio();

この種類の結合は、定義済みストリームが結合されたものの一部となってバッファリングされなくなってかなり効率が悪くなるため、デフォルトではありません。stdio および iostream の両方を、別のファイルに適用される同じプログラム内で使用できます。すなわち、stdio ルーチンを使用して stdout に書き込み、iostream に結合した別のファイルに書き込むことは可能です。また stdio FILE を入力用にオープンしても、stdin から入力しないかぎりは cin からも読み込むことができます。