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 - 指向streambuf对象的指针。

返回值

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

例外情况

基本保证- 如果抛出异常,则流处于有效状态。如果 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;
}
ios.htm