Namespaces
Variants

std::ios_base:: iword

From cppreference.net
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 をスローする可能性があります。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - その他のテキスト(Notes、Parameters、Return value、Exceptions、Example、Defect reports、See also)はC++関連の専門用語として翻訳せず、原文のまま保持しました - HTMLタグ、属性、クラス名、IDなどはすべて変更せず保持しました - 番号部分もそのまま保持しました

注記

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() のインデックスとして安全に使用できるプログラム全体で一意な整数を返す
(公開静的メンバ関数)