basic_ios::tie

basic_ios::tieは、同期する出力ストリームを設定または取得する。

basic_ios::tie - cpprefjp C++日本語リファレンス

basic_ios.cppで、

// ヘッダのインクルード
#include <iostream> // C++標準入出力
#include <fstream> // C++ファイル入出力
#include <string> // std::string

// main関数
int main(){

  // test.txtへ書き込む用のファイルストリーム.
  std::basic_ofstream<char> ofs("test.txt"); // std::basic_ofstream<char>のofsで"test.txt"を開く.

  // test.txtを読み込む用のファイルストリーム.
  std::basic_ifstream<char> ifs("test.txt"); // std::basic_ifstream<char>のifsで"test.txt"を開く.

  // test.txtに"ABCDE"を出力.
  ofs << "ABCDE"; // 出力演算子でofsに"ABCDE"を出力.

  // ifsで読み込む.
  std::string str; // ifsの内容を格納するstd::stringオブジェクトstr.
  if (ifs >> str){ // 入力演算子でifsで読み込んだ内容をstrに格納する.(失敗した場合, 括弧内は偽となる.)
    std::cout << "str = " << str << std::endl; // strを出力.
  }
  else{ // 失敗の場合.
    std::cout << "(ifs >> str) failed!" << std::endl; // "(ifs >> str) failed!"と出力.
  }

  // プログラムの終了
  return 0; // 正常終了

}

同じファイルのファイル書き込みストリームとファイル読み込みストリームを同時に用意し、書き込んだ後、瞬時に読み込むような処理を書くと、

書き込んだ後の読み込みに失敗する。
書き込んだ後の読み込みに失敗する。

書き込んだ後の読み込みに失敗する。
これは、出力してもフラッシュしないと入力できないからであり、

// ヘッダのインクルード
#include <iostream> // C++標準入出力
#include <fstream> // C++ファイル入出力
#include <string> // std::string

// main関数
int main(){

  // test.txtへ書き込む用のファイルストリーム.
  std::basic_ofstream<char> ofs("test.txt"); // std::basic_ofstream<char>のofsで"test.txt"を開く.

  // test.txtを読み込む用のファイルストリーム.
  std::basic_ifstream<char> ifs("test.txt"); // std::basic_ifstream<char>のifsで"test.txt"を開く.

  // test.txtに"ABCDE"を出力.
  ofs << "ABCDE"; // 出力演算子でofsに"ABCDE"を出力.

  // ofsをフラッシュ.
  ofs.flush(); // std::basic_ostream::flushでフラッシュ.

  // ifsで読み込む.
  std::string str; // ifsの内容を格納するstd::stringオブジェクトstr.
  if (ifs >> str){ // 入力演算子でifsで読み込んだ内容をstrに格納する.(失敗した場合, 括弧内は偽となる.)
    std::cout << "str = " << str << std::endl; // strを出力.
  }
  else{ // 失敗の場合.
    std::cout << "(ifs >> str) failed!" << std::endl; // "(ifs >> str) failed!"と出力.
  }

  // プログラムの終了
  return 0; // 正常終了

}

書き込んだ後にフラッシュをすると、

読み込める
読み込める

読み込める。
この出力及びフラッシュと入力を同期させるのがbasic_ios::tieで、

このように、basic_ios::tieで、ifsとofsを紐づけると、

明示的にflushしなくても読み込める
明示的にflushしなくても読み込める

明示的にflushしなくても読み込める。

Sample/cpp/basic_ios/tie/src/basic_ios at master · bg1bgst333/Sample · GitHub