public member function
<streambuf> <iostream>

std::basic_streambuf::pubsetbuf

basic_streambuf* pubsetbuf (char_type* s, streamsize n);
设置缓冲区数组
调用受保护的虚成员函数 setbuf,参数为 sn

basic_streambuf 中,成员 setbuf 不执行任何操作,但派生类可以重写它以以特定于每个派生类的方式影响对象:basic_filebufbasic_stringbuf 都重写了此虚成员函数,以将 s 指向的 n 个字符的数组设置为*流缓冲区*对象使用的*内部字符序列*(请参阅 basic_filebuf::setbufbasic_stringbuf::setbuf)。

参数

s, n
派生类中重写函数可能会使用到的参数。
成员类型 char_type流缓冲区(第一个类模板参数)中字符的类型。
streamsize 是一个带符号整型。

返回值

basic_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 个字符。
修改*流缓冲区*对象。
对同一数组或同一流缓冲区对象的并发访问可能会引入数据争用。

异常安全

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

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

另见