Namensräume
Varianten
Aktionen

std::fpos

Von cppreference.com
< cpp‎ | io
 
 
 
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::fpos wird von einigen Stromoperationen zurückgegeben, um Fehler anzuzeigen.
  • Explizite Konvertierung von (möglicherweise const) fpos zu std::streamoff. Das Ergebnis ist der gespeicherte Offset.
  • operator== und operator!=, die zwei Objekte vom Typ (möglicherweise const) std::fpos vergleichen 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.
  • 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::fpos subtrahieren 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üchlich
unterschiedlich 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) [bearbeiten]
gibt den Ausgabepositionsindikator zurück
(public member function of std::basic_ostream<CharT,Traits>) [bearbeiten]
setzt den Ausgabepositionsindikator
(public member function of std::basic_ostream<CharT,Traits>) [bearbeiten]
holt den Dateipositionierungsindikator
(function) [bearbeiten]