public member function
<ios> <iostream>

std::ios_base::iword

long& iword (int idx);
获取内部可扩展数组的整数元素
返回一个对应于内部可扩展数组中索引 idxlong 类型对象的引用。

如果 idx 是新元素的索引,并且内部可扩展数组不够长(或尚未分配),则函数会将其扩展(或分配),并根据需要添加任意数量的零初始化的元素。

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

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

参数

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

返回值

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

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// internal extensible array
#include <iostream>     // std::cout, std::cerr

// custom manipulator with per-stream static data:
std::ostream& Counter (std::ostream& os) {
  const static int index = os.xalloc();
  return os << ++os.iword(index);
}

int main()
{
  std::cout << Counter << ": first line\n";
  std::cout << Counter << ": second line\n";
  std::cout << Counter << ": third line\n";
  // cerr has its own count
  std::cerr << Counter << ": error line\n";
  return 0;
}

可能的输出
1: first line
2: second line
3: third line
1: error line


数据竞争

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

异常安全

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

另见