为什么ostream的put指针被修改,即使我没有使用ostream对象

时间:2013-04-26 17:40:51

标签: c++

我的程序中有以下代码。 IoFile.out几行。

    int main()
    {
     ifstream inFile("Iofile.out", ios::in|ios::out);
     ostream outStream(inFile.rdbuf());

     cout << "tellp outStream " << outStream.tellp() << endl;  //  tellp outStream 0
     cout << "tellg inFile " << inFile.tellg() << endl;        //  tellg inFile 0

     cout << inFile.rdbuf();  // Print whole file

     cout << "tellp outStream " << outStream.tellp() << endl;  //  tellp outStream 21
     cout << "tellg inFile " << inFile.tellg() << endl;        //  tellg inFile 21
     return 0;    
}

tellp和tellg的输出如注释中所示。 我的查询是当我将文件内容写入cout时,我希望只有streambuf的读指针(即tellg)移动到文件的末尾。但在这种情况下,我看到outStream的put指针也被移动到文件末尾。为什么是这样 ?为什么要将文件打印到cout导致outStream的put指针改变?

2 个答案:

答案 0 :(得分:6)

您无法打开ifstream进行撰写。如果你想要阅读和阅读写访问权限,请使用fstream

答案 1 :(得分:0)

你打印整个文件,对吗? 您在ostream构造函数中使用streambuffer指针。 然后你打印数据(这会移动指针)(ostream有一个参考) 并获得指针位置(移动后) 你的字符串有多少个字符? (21?) 在打印rdbuf()时移动了指针。 我认为它是因为它内部使用了一个算术而不是它的指针