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

why ostream's put pointer is modified even if i did not use ostream object

本文关键字:ostream 指针 put 修改 对象 为什么      更新时间:2023-10-16

我的程序中有以下代码。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指针发生更改?

不能打开ifstream进行写入。如果你想同时阅读&写访问,使用fstream

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