std::strstreambuf::underflow
Von cppreference.com
< cpp | io | strstreambuf
| protected: virtual int_type underflow(); |
(veraltet in C++98) (entfernt in C++26) |
|
Liest das nächste Zeichen aus dem Lese-Bereich des Puffers.
Wenn für die Eingabesequenz eine Leseposition verfügbar ist (gptr() < egptr(), wird (unsigned char)(*gptr()) zurückgegeben.
Andernfalls, wenn pptr() nicht null ist und pptr() > egptr() (es gibt einen Schreibbereich und dieser befindet sich nach dem Lese-Bereich), wird das Ende des Lese-Bereichs erweitert, um die Zeichen einzuschließen, die kürzlich in den Schreibbereich geschrieben wurden, indem egptr() auf einen Wert zwischen gptr() und pptr() erhöht wird, und dann wird (unsigned char)(*gptr()) zurückgegeben.
Andernfalls wird EOF zurückgegeben, um einen Fehler anzuzeigen.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Das nächste Zeichen im Lese-Bereich, (unsigned char)(*gptr()) bei Erfolg, EOF bei Fehler.
[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 get area is " << egptr()-eback() << " size of the put area is " << epptr()-pbase() << '\n'; int_type rc = std::strstreambuf::overflow(c); std::cout << "After overflow(): size of the get area is " << egptr()-eback() << " size of the put area is " << epptr()-pbase() << '\n'; return rc; } int_type underflow() { std::cout << "Before underflow(): size of the get area is " << egptr()-eback() << " size of the put area is " << epptr()-pbase() << '\n'; int_type ch = std::strstreambuf::underflow(); std::cout << "After underflow(): size of the get area is " << egptr()-eback() << " size of the put area is " << epptr()-pbase() << '\n'; if (ch == EOF) std::cout << "underflow() returns EOF\n"; else std::cout << "underflow() returns '" << char(ch) << "'\n"; return ch; } }; int main() { mybuf sbuf; // read-write dynamic strstreambuf std::iostream stream(&sbuf); int n; stream >> n; stream.clear(); stream << "123"; stream >> n; std::cout << n << '\n'; }
Mögliche Ausgabe
Before underflow(): size of the get area is 0 size of the put area is 0 After underflow(): size of the get area is 0 size of the put area is 0 underflow() returns EOF Before overflow(): size of the get area is 0 size of the put area is 0 After overflow(): size of the get area is 0 size of the put area is 32 Before underflow(): size of the get area is 0 size of the put area is 32 After underflow(): size of the get area is 3 size of the put area is 32 underflow() returns '1' Before underflow(): size of the get area is 3 size of the put area is 32 After underflow(): size of the get area is 3 size of the put area is 32 underflow() returns EOF 123
[bearbeiten] Siehe auch
| [virtuell] |
liest Zeichen aus der zugeordneten Eingabesequenz in den Get-Bereich (virtuelle geschützte Member-Funktion von std::basic_streambuf<CharT,Traits>) |
| [virtuell] |
gibt das nächste in der Eingabesequenz verfügbare Zeichen zurück (virtuelle protected Memberfunktion von std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtuell] |
liest aus der zugeordneten Datei (virtuelle protected Memberfunktion von std::basic_filebuf<CharT,Traits>) |
| liest ein Zeichen aus der Eingabesequenz, ohne die Sequenz vorzurücken (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| extrahiert Zeichen (public member function of std::basic_istream<CharT,Traits>) |