public member function
<ios> <iostream>

std::ios::rdbuf

get (1)
streambuf* rdbuf() const;
set (2)
streambuf* rdbuf (streambuf* sb);
获取/设置流缓冲区
第一种形式(1)返回指向当前与流关联的流缓冲区对象的指针。

第二种形式(2)还将 sb 指向的对象设置为与流关联的流缓冲区,并清除错误状态标志

如果 sb空指针,则函数会自动设置 badbit 错误状态标志 (如果成员 exceptions 已设置为 badbit,则可能会抛出异常)。

某些派生流类(如 stringstreamfstream)维护它们自己的内部流缓冲区,在构造时它们就与该内部流缓冲区关联。调用此函数更改关联的流缓冲区不会影响该内部流缓冲区:该流将拥有一个与内部流缓冲区不同的关联的流缓冲区 (尽管流上的输入/输出操作始终使用关联的流缓冲区,如该成员函数所返回的那样)。

参数

sb
指向 streambuf 对象的指针。

返回值

指向调用前与流关联的流缓冲区对象的指针。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// redirecting cout's output thrrough its stream buffer
#include <iostream>     // std::streambuf, std::cout
#include <fstream>      // std::ofstream

int main () {
  std::streambuf *psbuf, *backup;
  std::ofstream filestr;
  filestr.open ("test.txt");

  backup = std::cout.rdbuf();     // back up cout's streambuf

  psbuf = filestr.rdbuf();        // get file's streambuf
  std::cout.rdbuf(psbuf);         // assign streambuf to cout

  std::cout << "This is written to the file";

  std::cout.rdbuf(backup);        // restore cout's original streambuf

  filestr.close();

  return 0;
}

此示例同时使用了两种函数形式:首先获取文件 streambuf 对象的指针,然后将其分配给 cout

数据竞争

访问(1)或修改(2)流对象。
并发访问同一个流对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,流处于有效状态。
如果 sb空指针且成员 exceptions 被设置为对 badbit 抛出,则会抛出成员类型为 failure 的异常。

另见