From http://www.cplusplus.com/reference/ios/ios/rdbuf/ http://www.cplusplus.com/reference/ios/ios/rdbuf/:
一些派生流类(例如 stringstream 和 fstream)维护自己的内部流缓冲区,它们与构造相关。调用该函数可以改变关联流缓冲区对此没有影响内部流缓冲区:该流将有一个关联流缓冲区这不同于它的内部流缓冲区(尽管流上的输入/输出操作总是使用关联流缓冲区,由该成员函数返回)。
And on http://www.cplusplus.com/reference/fstream/ifstream/rdbuf/ http://www.cplusplus.com/reference/fstream/ifstream/rdbuf/:
返回一个指向内部文件缓冲区对象.
但请注意,这不一定与当前的相同关联流缓冲区(由 ios::rdbuf 返回)。
那么如果内部缓冲区不用于输入和输出操作,它有什么用呢?如果这意味着这两行可以返回两个不同的对象,那么为什么这会有用呢?
std::stringstream ss;
ss.rdbuf(); // (1) returns "internal" stream buffer?
static_cast<std::ios&>(ss).rdbuf(); // (2) returns "associated" stream buffer?
内部缓冲区用于输入和输出操作,直到调用为止rdbuf
还有一些其他的论点。然后它就坐在那里。
您可以随时通过致电重新启用它
stream.basic_ios::rdbuf(stream.rdbuf());
请注意,例如内部缓冲区std::fstream
总是一个std::filebuf
由流对象拥有和管理的对象,而关联的缓冲区可以是任何streambuf
派生对象。该流仅存储指向它的基类指针,并且不管理其生命周期。
另请注意,该标准未使用术语“内部缓冲区”。该标准使用了一些不同的术语:
班上basic_ifstream<charT, traits>
支持读取命名文件。它使用一个basic_filebuf<charT, traits>
对象来控制关联的序列。为了便于说明,此处将维护的数据表示为:
— sb
, the filebuf
object.
上面的“维护数据”就是 cplusplus.com 所说的“内部流缓冲区”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)