C++ IOS 库 - Iword



描述

它用于获取可扩展数组的整数元素,并返回一个指向类型为 long 的对象的引用,该对象对应于内部可扩展数组中索引 idx。

如果 idx 是一个新元素的索引,并且内部可扩展数组不够长(或尚未分配),则该函数会将其扩展(或分配)尽可能多的零初始化元素。

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

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

声明

以下是 ios_base::iword 函数的声明。

long& iword (int idx);

参数

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

返回值

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

异常

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

数据竞争

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

示例

下面的示例解释了 ios_base::iword 函数。

#include <iostream>     

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";
  
   std::cerr << Counter << ": error line\n";
   return 0;
}

让我们编译并运行上述程序,这将产生以下结果:

1: first line
2: second line
3: third line
1: error line
ios.htm
广告