Namensräume
Varianten
Aktionen

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

#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>) [bearbeiten]
[virtuell]
gibt das nächste in der Eingabesequenz verfügbare Zeichen zurück
(virtuelle protected Memberfunktion von std::basic_stringbuf<CharT,Traits,Allocator>) [bearbeiten]
[virtuell]
liest aus der zugeordneten Datei
(virtuelle protected Memberfunktion von std::basic_filebuf<CharT,Traits>) [bearbeiten]
liest ein Zeichen aus der Eingabesequenz, ohne die Sequenz vorzurücken
(öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) [bearbeiten]
extrahiert Zeichen
(public member function of std::basic_istream<CharT,Traits>) [edit]