c – 为什么可以打开`ifstream`进行读写?

我今天看到了一段有趣的代码:

ifstream fil;

fil.open( "ini.txt", std::ios::in | std::ios::out );

我正准备咆哮它的破碎,但令我惊讶的是,我看到cppreference.com显然认为这是正确的:

http://en.cppreference.com/w/cpp/io/basic_ifstream/open

mode – specifies stream open mode. It is bitmask type, the following constants are defined:

  • in: open for reading
  • out: open for writing

ifstream如何理解为INPUT文件流,如何打开读取和写入?

它不一定是fstream而不是ifstream吗?

最佳答案 std :: ifstream就像是std :: basic_filebuf的句柄.您甚至可以通过调用std :: basic_ifstream :: rdbuf从句柄访问该缓冲区.

您可以从句柄中窃取该缓冲区,并将其分配给另一个(我不会详细介绍它).这是有趣的事情.您可以将该缓冲区从ifstream移动到ofstream.这需要能够打开缓冲区进行写入.因此,您链接的相同参考页面说明了这一点:

Effectively calls rdbuf()->open(filename, mode | ios_base::in)

这是一个方便的功能,以避免以后操纵缓冲区本身.

点赞