public member function
<streambuf> <iostream>

std::streambuf::pubsetbuf

streambuf* pubsetbuf (char* s, streamsize n);
设置缓冲区数组
调用受保护的虚拟成员 setbuf,并传递相同的参数 sn

streambuf 中,成员 setbuf 不执行任何操作,但派生类可以重写它,以便以每种派生类特有的方式影响对象:filebufstringbuf 都重写了这个虚拟成员函数,以将 s 指向的 n 个字符的数组设置为“流缓冲区”对象使用的内部字符序列(请参阅 filebuf::setbufstringbuf::setbuf)。

参数

s, n
派生类中重写函数可能会使用到的参数。
streamsize 是一个带符号整型。

返回值

streambuf 中,它总是返回 this

示例

1
2
3
4
5
6
7
8
9
10
11
12
// set character buffer (pubsetbuf)
#include <fstream>      // std::fstream

int main () {
  char mybuffer [512];
  std::fstream filestr;
  filestr.rdbuf()->pubsetbuf(mybuffer,512);

  // operations with file stream here.

  return 0;
}

此示例中的代码为 filestr流缓冲区对象设置了一个新的 512 个字符的缓冲区。

数据竞争

此调用以及后续对其他成员函数的调用都可能访问和/或修改 s 指向的数组中的前 n 个字符。
修改*流缓冲区*对象。
对同一数组或同一流缓冲区对象的并发访问可能会引入数据争用。

异常安全

基本保证:如果抛出异常,则流缓冲区处于有效状态(这也适用于标准派生类)。

无效参数会导致未定义行为

另见