std::ios_base::iword
| long& iword( int index ); |
||
Allokiert oder vergrößert zunächst den privaten Speicher (dynamisches Array von long oder einer anderen indizierbaren Datenstruktur) ausreichend, um index zu einem gültigen Index zu machen, und gibt dann eine Referenz auf das long-Element des privaten Speichers mit dem Index index zurück.
Die Referenz kann durch jede Operation auf diesem ios_base-Objekt, einschließlich eines weiteren Aufrufs von iword(), ungültig gemacht werden, aber die gespeicherten Werte bleiben erhalten, sodass das Lesen von iword(index) mit demselben Index später denselben Wert ergibt, bis zum nächsten Aufruf von std::basic_ios::copyfmt(). Der Wert kann für jeden Zweck verwendet werden. Der Index des Elements muss durch einen vorherigen Aufruf von xalloc() ermittelt werden, andernfalls ist das Verhalten undefiniert. Neue Elemente werden mit 0 initialisiert.
Wenn die Funktion fehlschlägt (möglicherweise aufgrund eines Zuweisungsfehlers) und *this ein Basisklassen-Unterobjekt eines basic_ios<>-Objekts oder Unterobjekts ist, ruft sie std::basic_ios<>::setstate(badbit) auf, was std::ios_base::failure auslösen kann.
Inhalt |
[edit] Anmerkungen
Die typische Verwendung des iword-Speichers besteht darin, Informationen (z. B. benutzerdefinierte Formatierungsflags) von benutzerdefinierten I/O-Manipulatoren an benutzerdefinierte operator<< und operator>> oder an benutzerdefinierte Formatierungsfacet zu übergeben, die in Standardstreams eingebettet sind.
[edit] Parameter
| index | - | index Wert des Elements |
[edit] Rückgabewert
Ein Verweis auf das Element.
[edit] Ausnahmen
Kann std::ios_base::failure auslösen, wenn badbit gesetzt wird.
[edit] 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
[edit] Defect Reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 36 | C++98 | der gespeicherte Wert könnte nicht beibehalten werden, wenn die Referenz ungültig gemacht wird |
der gespeicherte Wert bleibt erhalten bis zum nächsten Aufruf von copyfmt() |
| LWG 41 | C++98 | die Funktion setzt badbit selbst im Fehlerfall, aber ios_base bietet keine solche Schnittstelle |
badbit wird von basic_ios gesetzt(wenn *this sein Basisklassen-Unterobjekt ist) |
[edit] Siehe auch
| vergrößert den privaten Speicher bei Bedarf und greift auf das void*-Element am gegebenen Index zu (öffentliche Memberfunktion) | |
| [static] |
gibt eine programmweite eindeutige Ganzzahl zurück, die sicher als Index für pword() und iword() verwendet werden kann (öffentliche statische Memberfunktion) |