std::ios_base:: iword
|
long
&
iword
(
int
index
)
;
|
||
まず、プライベートストレージ( long の動的配列または他のインデックス可能なデータ構造)を割り当てるかサイズ変更し、 index が有効なインデックスとなるように十分な容量を確保します。その後、 long 型のプライベートストレージ要素のうちインデックス index に対応する要素への参照を返します。
この参照は、この
ios_base
オブジェクトに対するあらゆる操作(
iword()
の別の呼び出しを含む)によって無効化される可能性がありますが、保存された値は保持されるため、後で同じインデックスで
iword
(
index
)
から読み取ると、次に
std::basic_ios::copyfmt()
が呼び出されるまで同じ値が得られます。この値はあらゆる目的に使用できます。要素のインデックスは、事前に
xalloc()
を呼び出して取得しておく必要があり、そうでない場合の動作は未定義です。新しい要素は
0
に初期化されます。
関数が失敗した場合(おそらくアロケーションの失敗が原因)、かつ
*
this
が
basic_ios<>
オブジェクトまたはその部分オブジェクトの基底クラス部分オブジェクトである場合、
std::
basic_ios
<>
::
setstate
(
badbit
)
を呼び出し、これは
std::ios_base::failure
をスローする可能性があります。
目次 |
注記
iwordストレージの典型的な使用法は、ユーザー定義のI/Oマニピュレータからユーザー定義の
operator<<
および
operator>>
へ、あるいは標準ストリームにimbueされたユーザー定義の書式化ファセットへ情報(例:カスタム書式化フラグ)を渡すことです。
パラメータ
| index | - | 要素のインデックス値 |
戻り値
要素への参照。
例外
badbitの設定時に std::ios_base::failure をスローする可能性があります。
例
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Fooオブジェクトで使用するiwordストレージを割り当て int Foo::foo_xalloc = std::ios_base::xalloc(); // このユーザー定義operator<<は、iwordが1を保持する場合に文字列を逆順で出力 std::ostream& operator<<(std::ostream& os, Foo& f) { if (os.iword(Foo::foo_xalloc) == 1) return os << std::string(f.data.rbegin(), f.data.rend()); else return os << f.data; } // このI/Oマニピュレータはiwordに格納された数値を0と1の間で反転 std::ios_base& rev(std::ios_base& os) { os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc); return os; } int main() { Foo f("example"); std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n'; }
出力:
example elpmaxe example
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 36 | C++98 |
参照が無効化された場合、保存された値が
保持されない可能性がある |
保存された値は次回の
copyfmt()
呼び出しまで
保持される |
| LWG 41 | C++98 |
失敗時にこの関数自体がbadbitを設定するが、
ios_base
はそのようなインターフェースを提供しない
|
badbitは
basic_ios
によって設定される
( * this がその基底クラス部分オブジェクトである場合) |
関連項目
|
必要に応じてプライベートストレージをリサイズし、指定されたインデックスの
void
*
要素にアクセスする
(公開メンバ関数) |
|
|
[static]
|
pword()
および
iword()
のインデックスとして安全に使用できるプログラム全体で一意な整数を返す
(公開静的メンバ関数) |