std::basic_stringbuf<CharT,Traits,Allocator>:: underflow
|
protected
:
virtual int_type underflow ( ) |
||
Lit le caractère suivant de la zone de lecture du tampon.
Spécifiquement :
Tout caractère dans le tampon qui a été initialisé, qu'il provienne de la chaîne passée dans le constructeur ou qu'il ait été ajouté par overflow() , est considéré comme faisant partie de la séquence d'entrée.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Traits :: to_int_type ( * gptr ( ) ) (le prochain caractère à lire dans la zone de lecture) en cas de succès, ou Traits :: eof ( ) en cas d'échec.
Exemple
#include <iostream> #include <sstream> struct mybuf : std::stringbuf { mybuf(const std::string& new_str, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) : std::stringbuf(new_str, which) {} int_type overflow(int_type c) { std::cout << "Before overflow(): get area size is " << egptr() - eback() << ", the put area size is " << epptr() - pbase() << '\n'; int_type rc = std::stringbuf::overflow(c); std::cout << "After overflow(): get area size is " << egptr() - eback() << ", put area size is " << epptr() - pbase() << '\n'; return rc; } int_type underflow() { std::cout << "Before underflow(): get area size is " << egptr() - eback() << ", put area size is " << epptr() - pbase() << '\n'; int_type ch = std::stringbuf::underflow(); std::cout << "After underflow(): get area size is " << egptr() - eback() << ", put area size 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("123"); // flux en lecture-écriture std::iostream stream(&sbuf); int n; stream >> n; // appelle sgetc() quatre fois // trois appels retournent les caractères '1', '2', '3' // le quatrième appel, gptr() == egptr() et underflow() est appelé // underflow retourne EOF std::cout << "n = " << n << '\n'; stream.clear(); // efface l'eofbit stream << "123456"; // sputc() est appelé 6 fois // les trois premiers appels stockent "123" dans le tampon existant // le 4ème appel trouve que pptr() == epptr() et appelle overflow() // overflow() agrandit le tampon et définit egptr() à 4 // les 5ème et 6ème appels stockent '5' et '6', avançant pptr() stream >> n; // appelle sgetc() 4 fois // le 1er appel retourne le '4' rendu disponible par overflow() // au 2ème appel, egptr() == egptr() et underflow() est appelé // underflow avance egptr() pour égaler pptr() (qui est 6) // le 3ème sgetc() retourne '6' // le 4ème sgetc() trouve gptr() == egptr(), appelle underflow() // underflow() retourne EOF std::cout << "n = " << n << '\n'; }
Sortie possible :
Before underflow(): get area size is 3, put area size is 15 After underflow(): get area size is 3, put area size is 15 underflow() returns EOF n = 123 Before underflow(): get area size is 3, put area size is 15 After underflow(): get area size is 6, put area size is 15 underflow() returns '4' Before underflow(): get area size is 6, put area size is 15 After underflow(): get area size is 6, put area size is 15 underflow() returns EOF n = 456
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 432 | C++98 |
il n'était pas clair si les caractères ajoutés par
overflow()
sont considérés comme faisant partie de la séquence d'entrée |
clarifié |
Voir aussi
|
[virtual]
|
lit les caractères de la séquence d'entrée associée vers la zone de récupération
(fonction membre protégée virtuelle de
std::basic_streambuf<CharT,Traits>
)
|
|
[virtual]
|
lit depuis le fichier associé
(fonction membre protégée virtuelle de
std::basic_filebuf<CharT,Traits>
)
|
|
[virtual]
|
lit un caractère de la séquence d'entrée sans avancer le pointeur suivant
(fonction membre protégée virtuelle de
std::strstreambuf
)
|
|
lit un caractère de la séquence d'entrée sans avancer la séquence
(fonction membre publique de
std::basic_streambuf<CharT,Traits>
)
|