fstream eof()とread()の挙動

こちらのページ(【C/C++】ifstreamのeofメンバ関数(違和感がある挙動): 日々此精進)と全く同じ挙動を確認。VCでもgccでも確認したので、これはSTLの仕様ぽい。

いままで全然気がつかなかったんですが、10000個しかデータが入ってないハズが何故か10001個読み込んでいたことが今更わかって、上から下までチェックしなおす羽目になってうんざり。

結局今までこんな風に書いていたところを

ifstream ifs( ファイル名, ios::in | ios::binary );
while( !ifs.eof() ) {
ifs.read( (char*)変数, sizeof(変数) );
}

以下みたいに書き直したらとりあえず意図通りに動くようにはなった模様。

ifstream ifs( ファイル名, ios::in | ios::binary );
while( ifs.read( (char*)変数, sizeof(変数) ) ) {
ほげほげ;
}