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


資料競爭

可能會修改流物件。返回的值也可以用於修改流物件。
併發訪問同一個流物件可能導致資料爭用。

異常安全

基本保證:如果丟擲異常,流處於有效狀態。

另見