public member function
<ios> <iostream>

std::ios_base::pword

void*& pword (int idx);
获取可扩展数组的指针元素
返回一个指向类型的对象的引用 void*,该对象对应于内部可扩展数组中的索引 idx

如果 idx 是新元素的索引,并且内部可扩展数组不够长(或尚未分配),则该函数将根据需要用任意数量的初始化为空指针的元素来扩展它(或分配它)。

返回的引用保证至少在对流对象执行另一项操作之前有效,包括对 pword 的又一次调用。一旦执行了另一项操作,该引用可能会失效,尽管随后使用相同的 idx 参数调用此函数将返回对内部可扩展数组中相同值的引用。

内部可扩展数组是类型为 long(如果使用成员 iword 访问)或 void*(如果使用成员 pword 访问)的对象的通用数组。库可能会以多种方式实现此数组:iwordpword 可能共享一个唯一的数组,也可能不共享,甚至可能不是数组,而是某种其他数据结构。

参数

idx
内部可扩展数组元素的索引值。
某些实现期望 idx 是先前由成员 xalloc 返回的值。

返回值

内部可扩展数组中索引为 idx 的元素的引用。
此值作为类型为 void* 的对象的引用返回。
失败时,将返回一个有效的 void*&,它被初始化为 0,并且(如果流对象继承自 basic_ios)将设置 badbit 状态标志

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// pword example
#include <iostream>     // std::ios, std::cout, std::cerr, std::clog

const int name_index = std::ios::xalloc();

// stores pointer in extensible array:
void SetStreamName (std::ios& stream, const char* name) {
  stream.pword(name_index) = const_cast<char*>(name);
}

// custom manipulator that uses stored pointer:
std::ostream& StreamName (std::ostream& os) {
  const char* name = static_cast<const char*>(os.pword(name_index));
  if (name) os << name;
  else os << "(unknown)";
  return os;
}

int main()
{
  SetStreamName(std::cout, "standard output stream");
  SetStreamName(std::cerr, "standard error stream");
  std::cout << StreamName << '\n';
  std::cerr << StreamName << '\n';
  std::clog << StreamName << '\n';
  return 0;
}

可能的输出
standard output stream
standard error stream
(unknown)


数据竞争

可能会修改流对象。返回的值也可用于修改它。
并发访问同一个流对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,流处于有效状态。

另见