| I/O manipulators | ||||
| Print functions(C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
| Synchronized Output | ||||
(C++20) | ||||
| Types | ||||
| Error category interface | ||||
(C++11) | ||||
(C++11) |
| Member functions | ||||
| Formatting | ||||
| Locales | ||||
| Internal extensible array | ||||
ios_base::iword | ||||
| Miscellaneous | ||||
| Member classes | ||||
| Member types | ||||
long& iword(int index); | ||
First, allocates or resizes the private storage (dynamic array oflong or another indexable data structure) sufficiently to makeindex a valid index, then returns a reference to thelong element of the private storage with the indexindex.
The reference may be invalidated by any operation on thisios_base object, including another call toiword(), but the stored values are retained, so that reading fromiword(index) with the same index later will produce the same value until the next call tostd::basic_ios::copyfmt(). The value can be used for any purpose. The index of the element must be obtained by a previous call toxalloc(), otherwise the behavior is undefined. New elements are initialized to0.
If the function fails (possibly caused by an allocation failure) and*this is a base class subobject of abasic_ios<> object or subobject, callsstd::basic_ios<>::setstate(badbit) which may throwstd::ios_base::failure.
Contents |
Typical use of iword storage is to pass information (e.g. custom formatting flags) from user-defined I/O manipulators to user-definedoperator<< andoperator>> or to user-defined formatting facets imbued into standard streams.
| index | - | index value of the element |
A reference to the element.
May throwstd::ios_base::failure when setting the badbit.
#include <iostream>#include <string> struct Foo{staticint foo_xalloc;std::string data; Foo(conststd::string& s): data(s){}}; // Allocates the iword storage for use with Foo objectsint Foo::foo_xalloc= std::ios_base::xalloc(); // This user-defined operator<< prints the string in reverse if the iword holds 1std::ostream& operator<<(std::ostream& os, Foo& f){if(os.iword(Foo::foo_xalloc)==1)return os<<std::string(f.data.rbegin(), f.data.rend());elsereturn os<< f.data;} // This I/O manipulator flips the number stored in iword between 0 and 1std::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';}
Output:
exampleelpmaxeexample
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 36 | C++98 | the stored value might not be retained if the reference is invalidated | the stored value is retained until the next call of copyfmt() |
| LWG 41 | C++98 | the function set badbit by itself on failure, but ios_base does not provide such interface | badbit is set bybasic_ios(if*this is its base class subobject) |
| resizes the private storage if necessary and access to thevoid* element at the given index (public member function)[edit] | |
[static] | returns a program-wide unique integer that is safe to use as index topword() andiword() (public static member function)[edit] |