wifstream.tellg() 在流中前进位置?

wifstream.tellg() advancing position in the stream?

提问人:unlink 提问时间:2/4/2016 最后编辑:unlink 更新时间:2/5/2016 访问量:184

问:

我一直在 Visual Studio 2015 中使用 iostreams 进行一些基本的文件操作,并注意到这种奇怪的行为。

#include <fstream>
#include <iostream>
#include <sstream>

void main(int argc, char** argv)
{
    std::wifstream stream("example.txt");
    //std::ifstream stream("example.txt");
    //std::wstringstream stream(L"abcdefghijklmnopqrstuvxyz");

    std::wcout << (char)stream.peek() << "\n"; // a
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // b
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // c
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // d
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // e
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // f
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // g
    stream.tellg();
}

示例.txt包含:

abcdefghijklmnopqrstuvxyz

这似乎将流的当前特征提前了一个。这种情况只发生在 . 并且似乎不受影响。stream.tellg()std::wifstreamstd::ifstreamstd::wstringstream

这是 Visual Studio stl 实现中的错误吗?

C 可视化-C++ IOstream

评论


答:

0赞 wangke1020 2/5/2016 #1

此问题与 Visual C++ 2010 中的 wifstream/wfstream 实现错误类似。

正如斯蒂芬所说:

C++ 标准在调用 tellg() 时不提供行为保证 在以文本模式打开的文件中。

我想这就是原因。