std::fpos
| Definiert in Header <ios> |
||
| template< class State > class fpos; |
||
Spezialisierungen der Klassenschablone std::fpos identifizieren absolute Positionen in einem Strom oder in einer Datei. Jedes Objekt vom Typ fpos speichert die Byte-Position im Strom (typischerweise als privates Mitglied vom Typ std::streamoff) und den aktuellen Umschaltzustand, einen Wert vom Typ State (typischerweise std::mbstate_t).
Die folgenden Typedef-Namen für std::fpos<std::mbstate_t> werden bereitgestellt (obwohl sie im Standard anders geschrieben sind, bezeichnen sie denselben Typ)
| Definiert in Header
<iosfwd> | |
| Typ | Definition |
std::streampos
|
std::fpos<std::char_traits<char>::state_type> |
std::wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos(C++20) |
std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) |
std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) |
std::fpos<std::char_traits<char32_t>::state_type> |
Alle Spezialisierungen von fpos erfüllen die Anforderungen an DefaultConstructible, CopyConstructible, CopyAssignable, Destructible und EqualityComparable.
Wenn State trivial kopierkonstruierbar ist, hat fpos einen trivialen Kopierkonstruktor. Wenn State trivial kopierzuweisbar ist, hat fpos einen trivialen Kopierzuweisungsoperator. Wenn State trivial zerstörbar ist, hat fpos einen trivialen Destruktor.
Inhalt |
[bearbeiten] Template-Parameter
| Zustand | - | der Typ, der den Umschaltzustand repräsentiert |
| Typanforderungen | ||
-State muss die Anforderungen an Destructible, CopyAssignable, CopyConstructible und DefaultConstructible erfüllen. | ||
[bearbeiten] Member-Funktionen
| holt/setzt den Wert des Umschaltzustands (öffentliche Memberfunktion) |
Zusätzlich werden Member- und Nicht-Member-Funktionen bereitgestellt, um die folgenden Operationen zu unterstützen
- Ein Standardkonstruktor, der einen Offset von Null speichert und das Zustandsobjekt wertinitialisiert.
- Ein nicht-expliziter Konstruktor, der ein Argument vom Typ (möglicherweise const) std::streamoff akzeptiert, das diesen Offset speichert und das Zustandsobjekt wertinitialisiert. Dieser Konstruktor muss auch den speziellen Wert std::streamoff(-1) akzeptieren: Das auf diese Weise konstruierte
std::fposwird von einigen Stromoperationen zurückgegeben, um Fehler anzuzeigen.
- Explizite Konvertierung von (möglicherweise const)
fposzu std::streamoff. Das Ergebnis ist der gespeicherte Offset.
- operator== und operator!=, die zwei Objekte vom Typ (möglicherweise const)
std::fposvergleichen und ein bool Prvalue zurückgeben. p != q ist äquivalent zu !(p == q).
- operator+ und operator-, so dass für ein Objekt p vom Typ (möglicherweise const)
fpos<State>und ein Objekt o vom Typ (möglicherweise const) std::streamoff
- p + o vom Typ
fpos<State>ist und einen Offset speichert, der das Ergebnis der Addition von o zum Offset von p ist. - o + p hat einen Typ, der in
fpos<State>konvertierbar ist, und das Ergebnis der Konvertierung ist gleich p + o. - p - o vom Typ
fpos<State>ist und einen Offset speichert, der das Ergebnis der Subtraktion von o vom Offset von p ist.
- p + o vom Typ
- operator+= und operator-=, die einen (möglicherweise const) std::streamoff akzeptieren und ihn zum gespeicherten Offset addieren bzw. subtrahieren.
- operator-, der zwei Objekte vom Typ (möglicherweise const)
std::fpossubtrahieren kann, was ein std::streamoff ergibt, so dass für zwei solche Objekte p und q gilt: p == q + (p - q).
[bearbeiten] Hinweise
Einige der I/O-Stream-Memberfunktionen geben Objekte des Member-Typedefs pos_type zurück und manipulieren diese. Für Streams werden diese Member-Typedefs vom Template-Parameter Traits bereitgestellt, der standardmäßig std::char_traits ist, welche ihre pos_types als Spezialisierungen von std::fpos definieren. Das Verhalten der I/O-Stream-Bibliothek ist implementierungsabhängig, wenn Traits::pos_type nicht std::fpos<std::mbstate_t> (auch bekannt als std::streampos, std::wstreampos, etc.) ist.
[bearbeiten] Fehlerberichte
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 57 | C++98 | streampos und wstreampos waren widersprüchlichunterschiedlich erlaubt, während gefordert wurde, dass sie gleich sind |
klargestellt, dass sie gleich sind |
| P0759R1 | C++98 | Spezifikation war unklar und unvollständig | bereinigt |
| P1148R0 | C++11 | unklar, was und in welchem Header die Definitionen u16streampos und u32streampos sind |
wurde klargestellt |
| LWG 2114 (P2167R3) |
C++98 | Nicht-bool-Rückgabetypen von Gleichheitsvergleichen waren erlaubt | disallowed |
[bearbeiten] Siehe auch
| repräsentiert die relative Dateiposition (Offset von fpos), ausreichend zur Darstellung jeder Dateigröße (Typdeklaration) | |
| gibt den Ausgabepositionsindikator zurück (public member function of std::basic_ostream<CharT,Traits>) | |
| setzt den Ausgabepositionsindikator (public member function of std::basic_ostream<CharT,Traits>) | |
| holt den Dateipositionierungsindikator (function) |