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 的異常。

另見