std::ios_base:: iword
|
long
&
iword
(
int
index
)
;
|
||
Zuerst wird der private Speicher (dynamisches Array von long oder einer anderen indizierbaren Datenstruktur) so allokiert oder in der Größe angepasst, dass index ein gültiger Index wird, und dann wird eine Referenz auf das long -Element des privaten Speichers mit dem Index index zurückgegeben.
Die Referenz kann durch jede Operation an diesem
ios_base
Objekt ungültig werden, einschließlich eines weiteren Aufrufs von
iword()
, aber die gespeicherten Werte bleiben erhalten, sodass ein späteres Lesen von
iword
(
index
)
mit demselben Index denselben Wert liefert, bis zum nächsten Aufruf von
std::basic_ios::copyfmt()
. Der Wert kann für beliebige Zwecke verwendet werden. Der Index des Elements muss durch einen vorherigen Aufruf von
xalloc()
erhalten werden, andernfalls ist das Verhalten undefiniert. Neue Elemente werden mit
0
initialisiert.
Wenn die Funktion fehlschlägt (möglicherweise aufgrund eines Allokationsfehlers) und
*
this
ein Basisklassen-Subobjekt eines
basic_ios<>
-Objekts oder -Subobjekts ist, ruft sie
std::
basic_ios
<>
::
setstate
(
badbit
)
auf, was
std::ios_base::failure
auslösen kann.
Inhaltsverzeichnis |
Hinweise
Typische Verwendung des iword-Speichers ist die Weitergabe von Informationen (z.B. benutzerdefinierte Formatierungsflags) von benutzerdefinierten I/O-Manipulatoren an benutzerdefinierte
operator<<
und
operator>>
oder an benutzerdefinierte Formatierungsfacetten, die in Standardstreams imbued wurden.
Parameter
| Index | - | Indexwert des Elements |
Rückgabewert
Eine Referenz auf das Element.
Exceptions
Kann std::ios_base::failure auslösen, wenn das badbit gesetzt wird.
Beispiel
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Allocates the iword storage for use with Foo objects int Foo::foo_xalloc = std::ios_base::xalloc(); // This user-defined operator<< prints the string in reverse if the iword holds 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; } // This I/O manipulator flips the number stored in iword between 0 and 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'; }
Ausgabe:
example elpmaxe example
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 36 | C++98 |
der gespeicherte Wert könnte nicht
beibehalten werden, wenn die Referenz ungültig wird |
der gespeicherte Wert wird beibehalten
bis zum nächsten Aufruf von
copyfmt()
|
| LWG 41 | C++98 |
die Funktion setzt badbit selbstständig bei Fehlern,
aber
ios_base
bietet keine solche Schnittstelle
|
badbit wird durch
basic_ios
gesetzt
(falls * this sein Basisklassen-Subobjekt ist) |
Siehe auch
|
vergrößert den privaten Speicher bei Bedarf und ermöglicht Zugriff auf das
void
*
Element am gegebenen Index
(öffentliche Elementfunktion) |
|
|
[static]
|
gibt eine programmweit eindeutige Ganzzahl zurück, die sicher als Index für
pword()
und
iword()
verwendet werden kann
(öffentliche statische Elementfunktion) |