ファイルに複数のostreamが異なる出力順序を生成するのはなぜですか?たとえば、次のようにファイルの複数のostreamは異なる出力順序を生成します
#include <iostream>
#include <fstream>
using namespace std;
void writeTo(string filename){
ostream o;
o.open(filename, ios::app);
o << "Second\n";
o.close();
}
int main(){
ostream o;
o.open("foo.txt", ios::app);
o << "First\n";
writeTo("foo.txt");
o.close();
return 0;
}
出力ファイルが
Second
First
なぜこのような場合はありますか?それは最初から2番目ではないでしょうか?
私は私は1つのストリームを持つ、そのように参照することによって、それを渡すことによって、この動作を実現することができます知っているが、私は、同じファイルに複数のストリームのこの動作を引き起こすもの困惑している:
#include <iostream>
#include <fstream>
using namespace std;
void writeTo(ostream& o){
o << "Second\n";
}
int main(){
ostream o;
o.open("foo.txt", ios::app);
o << "First\n";
writeTo(o);
o.close();
return 0;
}
関数内の 'ostream'は' main() 'の前に破壊されていますので、まずバッファをフラッシュします。 – cantordust
@cantordust興味深い、あなたはそれを引用していただけますか? – Miket25
明示的に 'close()'を呼んでいるので、技術的にはバッファはストリームが破棄される前にフラッシュされますが、デストラクタは 'close()'を呼び出すので無関係です。 '[...]は最初にオーバーフロー(Traits :: eof())を呼び出し、すべての保留中の出力をファイルに書き出します(Traits :: eof())。ファイル[...] '。 'main()'で 'writeTo(" foo.txt ");を呼び出す前に' o.close() '**を呼び出すと、' First'の後に 'Second'が続くはずです。 – cantordust