std::basic_filebuf<CharT,Traits>::overflow
Von cppreference.com
< cpp | io | basic filebuf
| protected: virtual int_type overflow( int_type ch = Traits::eof() ); |
||
Schreibt Daten aus dem Ausgabebereich in die zugehörige Zeichensequenz (in die Datei).
Verhält sich wie die Basisklassenversion std::basic_streambuf::overflow(), mit der Ausnahme, dass das Verhalten des „Verbrauchens von Zeichen“ wie folgt definiert ist:
1) Verwendet zuerst std::codecvt::out der eingebetteten Locale, um die Zeichen in eine externe (möglicherweise Multibyte-)Darstellung zu konvertieren, die in einem temporären Puffer gespeichert wird, wie folgt: (XSIZE ist eine nicht spezifizierte Puffergröße)
const std::codecvt<CharT, char, typename Traits::state_type>& a_codecvt = std::use_facet<std::codecvt<CharT, char, typename Traits::state_type>>(getloc()); typename Traits::state_type state; CharT* end; char xbuf[XSIZE]; char* xbuf_end; std::codecvt_base::result r = a_codecvt.out(state, pbase(), pptr(), end, xbuf, xbuf + XSIZE, xbuf_end);
2) Schreibt dann alle vollständig konvertierten Zeichen aus dem Puffer in die Datei. Formal werden die folgenden Schritte basierend auf dem Wert von r durchgeführt
| r | Operation |
|---|---|
| std::codecvt_base::ok | Gibt die Zeichen in [xbuf, xbuf_end) in die Datei aus und schlägt fehl, wenn die Ausgabe fehlschlägt. An dieser Stelle, wenn pbase() != pptr() und pbase() == end beide true sind (was bedeutet, dass XSIZE nicht groß genug für ein einziges externes Zeichen ist), erhöhe XSIZE und wiederhole von vorne. |
| std::codecvt_base::partial | Gibt die konvertierten externen Zeichen in [xbuf, xbuf_end) in die Datei aus und wiederholt dies mit den verbleibenden unkonvertierten internen Zeichen in [end, pptr()). Wenn die Ausgabe fehlschlägt, schlägt die Funktion fehl (ohne Wiederholung). |
| std::codecvt_base::noconv | Gibt die Zeichen in [pbase(), pptr()) in die Datei aus. |
| std::codecvt_base::error | Schlägt fehl. |
Wenn die zugehörige Datei nicht geöffnet ist (is_open() gibt false zurück), schlägt die Ausgabe immer fehl.
|
3) Legt einen beobachtbaren Kontrollpunkt fest.
|
(seit C++26) |
Inhalt |
[bearbeiten] Parameter
| ch | - | das zu speichernde Zeichen im Put-Bereich |
[bearbeiten] Rückgabewert
Traits::not_eof(ch) um Erfolg anzuzeigen oder Traits::eof() um Fehlschlag anzuzeigen.
[bearbeiten] Hinweise
Wenn a_codecvt.always_noconv() true zurückgibt, kann der Aufruf von a_codecvt.out() übersprungen werden.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| [virtuell] |
schreibt Zeichen aus dem Put-Bereich in die zugeordnete Ausgabesequenz (virtuelle geschützte Member-Funktion von std::basic_streambuf<CharT,Traits>) |
| [virtuell] |
liest aus der zugeordneten Datei (virtual protected member function) |