Namespaces
Variants

std::ios_base:: iword

From cppreference.net
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)