C++ ios 库 - rdbuf
描述
它用于获取/设置流缓冲区。 如果 sb 是空指针,该函数会自动设置 badbit 错误状态标志(如果成员异常已通过 badbit,则可能会抛出异常)。
一些派生的流类(例如 stringstream 和 fstream)维护自己的内部流缓冲区,它们在构造时与之关联。调用此函数来更改关联的流缓冲区不会对该内部流缓冲区产生影响:流将具有与其内部流缓冲区不同的关联流缓冲区(尽管流上的输入/输出操作始终使用关联的流缓冲区, 由该成员函数返回)。
声明
以下是 ios::rdbuf 函数的声明。
get (1) streambuf* rdbuf() const; set (2) streambuf* rdbuf (streambuf* sb);
第一种形式 (1) 返回指向当前与流关联的流缓冲区对象的指针。
第二种形式 (2) 也将 sb 指向的对象设置为与流关联的流缓冲区,并清除错误状态标志。
参数
sb − 指向流缓冲区对象的指针。
返回值
指向在调用之前与流关联的流缓冲区对象的指针。
异常
Basic guarantee − 如果抛出异常,则流处于有效状态。 如果 sb 是一个空指针并且成员异常被设置为为 badbit 抛出,它会抛出成员类型失败的异常。
数据竞争
访问 (1) 或修改 (2) 流对象。
对同一流对象的并发访问可能会导致数据竞争。
示例
在下面的示例中解释了 ios::rdbuf 函数。
#include <iostream> #include <fstream> int main () { std::streambuf *psbuf, *backup; std::ofstream filestr; filestr.open ("test.txt"); backup = std::cout.rdbuf(); psbuf = filestr.rdbuf(); std::cout.rdbuf(psbuf); std::cout << "This is written to the file"; std::cout.rdbuf(backup); filestr.close(); return 0; }