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)


資料競爭

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

異常安全

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

另見