答え
すべてが Windows でコンパイルおよび実行されたにもかかわらず、フォーマットtellg
されていない入力関数として動作することを完全に忘れており、テキスト モードでは確実に使用できないため、矛盾が見られます。詳細については、 std::basic_istream::tellgを参照してください。
オリジナル
次の非常に単純なプログラムでは、gcc 4.7.1 (mingw) と MSVC2012 で異なる結果が得られます。
#include <iostream>
#include <fstream>
int main()
{
std::ifstream in("test.txt");
int i;
in >> i;
std::cout << in.tellg() << std::endl;
}
は次のtest.txt
とおりです (重要な注意:の後に改行があります1
)
1
MSVC 出力:
1
gcc 4.7.1 (mingw) 出力:
2
質問
改行を抽出する必要があるため、gccは正しいと思いoperator>>
ますが、確かではありません。どのコンパイラが正しいですか?
(注:両方のプログラムはコンパイルされ、Windowsで実行されました)。
テキストファイルのHEX
31 OD OA
Linux のような行末ファイル、つまり31 0A
MSVC 出力0
と gcc 出力を作成するとします1
。