Стандарт на самом деле не гарантирует какого-либо определенного c значения для tellg
, только если на его выходе через некоторое время запускается seekg
, он помещает поток в то же место, где он был. В любом случае, вывод tellg
определяется реализацией. Он даже не должен быть конвертируемым в целочисленный тип. С точки зрения реализаций, обычно файлы, открытые в двоичном режиме (и в текстовом режиме для систем * nix), будут выводить tellg
, равный смещению байта от начала файла, в то время как в текстовом режиме (не * nix системах) производя некоторое значение, большее или равное смещению байта.
По определенной c причине, по которой tellg
увеличивается на 1 каждый раз, когда вы добавляете строку, одним из возможных факторов, который мог повлиять на это поведение, определяемое реализацией в вашем компиляторе, может быть тот факт, что Windows терминатор строки \n\r
составляет два байта вместо одного. Конечно, полагаться на поведение, определяемое реализацией, как правило, плохая идея.
Источник: { ссылка }