Namensräume
Varianten
Aktionen

std::ios_base::iword

Von cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
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) [edit]
[static]
gibt eine programmweite eindeutige Ganzzahl zurück, die sicher als Index für pword() und iword() verwendet werden kann
(öffentliche statische Memberfunktion) [edit]