std::strstreambuf::overflow
Von cppreference.com
< cpp | io | strstreambuf
| protected: virtual int_type overflow( int_type c = EOF ); |
(veraltet in C++98) (entfernt in C++26) |
|
Hängt das Zeichen c an den Ausgabebereich des Puffers an und realloziiert ihn, wenn möglich.
1) Wenn c == EOF, tut nichts.
2) Andernfalls, wenn im Ausgabebereich eine Schreibposition verfügbar ist (pptr() < epptr()), wird das Zeichen gespeichert, als ob durch *pptr()++ = c.
3) Andernfalls, wenn der Modus des Stream-Puffers nicht dynamisch ist oder der Stream-Puffer derzeit eingefroren ist, schlägt die Funktion fehl und gibt EOF zurück.
4) Andernfalls realloziiert die Funktion ein dynamisches Array (oder weist es anfänglich zu), das groß genug ist, um den Inhalt des aktuellen dynamischen Arrays (falls vorhanden) plus mindestens eine zusätzliche Schreibposition aufzunehmen. Wenn ein Zeiger auf die Allokationsfunktion
palloc im Konstruktor verwendet wurde, wird diese Funktion mit (*palloc)(n) aufgerufen, wobei n die zu allozierende Anzahl von Bytes ist, andernfalls wird new char[n] verwendet. Wenn ein Zeiger auf die Deallokationsfunktion pfree im Konstruktor verwendet wurde, wird diese Funktion mit (*pfree)(p) aufgerufen, um das vorherige Array bei Bedarf zu deallozieren, andernfalls wird delete[] p verwendet. Wenn die Allokation fehlschlägt, schlägt die Funktion fehl und gibt EOF zurück.Inhalt |
[bearbeiten] Parameter
| c | - | das zu speichernde Zeichen im Put-Bereich |
[bearbeiten] Rückgabewert
Wenn c == EOF, wird ein Wert ungleich EOF zurückgegeben. Andernfalls wird bei Erfolg (unsigned char)(c) zurückgegeben, bei Fehlschlag EOF.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <strstream> struct mybuf : std::strstreambuf { int_type overflow(int_type c) { std::cout << "Before overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; int_type rc = std::strstreambuf::overflow(c); std::cout << "After overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; return rc; } }; int main() { mybuf sbuf; // read-write dynamic strstreambuf std::iostream stream(&sbuf); stream << "Sufficiently long string to overflow the initial allocation, at least " << " on some systems."; }
Mögliche Ausgabe
Before overflow(): size of the put area is 16 with 0 write positions available After overflow(): size of the put area is 32 with 15 write positions available Before overflow(): size of the put area is 32 with 0 write positions available After overflow(): size of the put area is 64 with 31 write positions available Before overflow(): size of the put area is 64 with 0 write positions available After overflow(): size of the put area is 128 with 63 write positions available
[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] |
hängt ein Zeichen an die Ausgabesequenz an (virtuelle geschützte Mitgliedsfunktion von std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtuell] |
schreibt Zeichen aus dem Schreibbereich in die zugeordnete Datei (virtuelle geschützte Memberfunktion von std::basic_filebuf<CharT,Traits>) |
| schreibt ein Zeichen in den Put-Bereich und rückt den nächsten Zeiger vor (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| fügt ein Zeichen ein (public member function of std::basic_ostream<CharT,Traits>) |