C++ 为什么可以同时打开“ifstream”进行阅读和写作?
今天我看到了一段有趣的代码:C++ 为什么可以同时打开“ifstream”进行阅读和写作?,c++,file-io,fstream,C++,File Io,Fstream,今天我看到了一段有趣的代码: ifstream fil; fil.open( "ini.txt", std::ios::in | std::ios::out ); 我正要大骂它的破碎,但令我惊讶的是,我看到cppreference.com显然认为这是正确的: 模式-指定流打开模式。它是位掩码类型,定义了以下常量: 开放阅读 外出:开放写作 据我所知,ifstream是一个输入文件流,如何打开它进行读写 它是否必须是fstream而不是ifstream?您需要使用fstream: fst
ifstream fil;
fil.open( "ini.txt", std::ios::in | std::ios::out );
我正要大骂它的破碎,但令我惊讶的是,我看到cppreference.com显然认为这是正确的:
模式-指定流打开模式。它是位掩码类型,定义了以下常量:
- 开放阅读
- 外出:开放写作
ifstream
是一个输入文件流,如何打开它进行读写
它是否必须是
fstream
而不是ifstream
?您需要使用fstream
:
fstream file("input.txt", ios::in | ios::out | ios::app);
int data;
file >> data;
file << data +1;
file.close();
fstream文件(“input.txt”,ios::in | ios::out | ios::app);
int数据;
文件>>数据;
文件std::ifstream
就像std::basic_filebuf
上的句柄。您甚至可以通过调用std::basic\u ifstream::rdbuf
从句柄访问该缓冲区
您可以从句柄中窃取该缓冲区,并将其分配给另一个句柄(我将不讨论它是如何完成的)。有趣的是。您可以将该缓冲区从ifstream
移动到流的。这需要能够打开缓冲区进行写入。因此,您链接的同一参考页上说:
有效地调用rdbuf()->open(文件名,模式| ios_base::in)
这是一个方便的函数,可以避免以后操纵缓冲区本身 为此,您需要std::fstream
。@user0042罚款;那么,为什么cppreference在IFSTREAM::open下面同时列出std::ios::in
和std::ios::out
,您会期待什么呢?例外?@Joe-你没有“撤销”任何东西。否决票仍然有效。有人对这个问题的看法是正确的。你的观点不同,但这并不能改变其他人的观点。如果一棵树倒在森林里,没有人听见,它真的倒了吗?或者换句话说:如果你打开一个istream
进行编写,但是它没有用于编写的API,那么你真的可以对它进行编写吗?问题已经表明,他们知道它应该是fstream。他们在问为什么ifstream能起作用。