他の誰かのコードをデバッグしているときに、C++ のfstream
オブジェクトとストリーム演算子を介した入力の間の相互作用に遭遇しましたが、ios::app
これは以前は認識していませんでした。
file.txt
テキストデータが存在し、含まれていると仮定します。fstream
元のコンテキストでは、 は長寿命で、入力と出力の両方に使用されていました。次のコードは期待どおりに機能しません (ファイルからの出力を提供しません)。エラー処理コードは省略されています。
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream f("file.txt", ios::app);
string in;
f >> in;
cout << in << endl;
f.close();
return 0;
}
ファイルを開くステートメントを次のように変更すると、問題が解決します。
fstream f("file.txt");
これは予想される動作ですか?ios::app でオブジェクトを開きfstream
、ストリーム オペレータを介した入力が正しく動作することを期待することはできないのでしょうか?
64 ビット Linux では g++ 4.6.3、32 ビット Windows 7 では mingw-g++ 4.4.1 でコンパイル