Namespaces
Variants

std::basic_istream<CharT,Traits>:: get

From cppreference.net
int_type get ( ) ;
(1)
basic_istream & get ( char_type & ch ) ;
(2)
basic_istream & get ( char_type * s, std:: streamsize count ) ;
(3)
basic_istream & get ( char_type * s, std:: streamsize count, char_type delim ) ;
(4)
basic_istream & get ( basic_streambuf & strbuf ) ;
(5)
basic_istream & get ( basic_streambuf & strbuf, char_type delim ) ;
(6)

Extrait un ou plusieurs caractères du flux.

Toutes les versions se comportent comme des UnformattedInputFunction s . Après la construction et la vérification de l'objet sentinelle, ces fonctions effectuent les opérations suivantes :

1) Lit un caractère et le retourne s'il est disponible. Sinon, retourne Traits :: eof ( ) et positionne failbit et eofbit .
2) Lit un caractère et le stocke dans ch si disponible. Sinon, laisse ch inchangé et définit failbit et eofbit . Notez que cette fonction n'est pas surchargée pour les types signed char et unsigned char , contrairement à l'opérateur d'entrée de caractères formaté >>.
3) Identique à get ( s, count, widen ( ' \n ' ) ) , c'est-à-dire lit au maximum std:: max ( 0 , count - 1 ) caractères et les stocke dans la chaîne de caractères pointée par s jusqu'à ce que ' \n ' soit trouvé.
4) Lit les caractères et les stocke dans les emplacements successifs du tableau de caractères dont le premier élément est pointé par s . Les caractères sont extraits et stockés jusqu'à ce que l'une des conditions suivantes se produise :
  • count est inférieur à 1 ou count - 1 caractères ont été stockés.
  • une condition de fin de fichier se produit dans la séquence d'entrée ( setstate ( eofbit ) est appelée).
  • le prochain caractère d'entrée disponible c est égal à delim , tel que déterminé par Traits :: eq ( c, delim ) . Ce caractère n'est pas extrait (contrairement à getline() ).
Dans tous les cas, si count > 0 , un caractère nul ( CharT ( ) ) est stocké dans l'emplacement successif suivant du tableau.
5) Identique à get ( strbuf, widen ( ' \n ' ) ) , c'est-à-dire lit les caractères disponibles et les insère dans l'objet basic_streambuf donné jusqu'à ce que ' \n ' soit trouvé.
6) Lit les caractères et les insère dans la séquence de sortie contrôlée par l'objet basic_streambuf donné. Les caractères sont extraits et insérés dans strbuf jusqu'à ce que l'une des conditions suivantes se produise :
  • une condition de fin de fichier se produit dans la séquence d'entrée.
  • l'insertion dans la séquence de sortie échoue (auquel cas le caractère qui n'a pas pu être inséré n'est pas extrait).
  • le prochain caractère d'entrée disponible c est égal à delim , tel que déterminé par Traits :: eq ( c, delim ) . Ce caractère n'est pas extrait.
  • une exception se produit (auquel cas l'exception est capturée et non relancée).

Si aucun caractère n'a été extrait, appelle setstate ( failbit ) .

Toutes les versions définissent la valeur de gcount() au nombre de caractères extraits.

Table des matières

Paramètres

ch - référence au caractère dans lequel écrire le résultat
s - pointeur vers la chaîne de caractères pour stocker les caractères
count - taille de la chaîne de caractères pointée par s
delim - caractère délimiteur pour arrêter l'extraction. Il n'est pas extrait ni stocké
strbuf - tampon de flux pour lire le contenu

Valeur de retour

1) Le caractère extrait ou Traits :: eof ( ) .
2-6) * this

Exceptions

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Si une opération interne lève une exception, elle est capturée et badbit est défini. Si exceptions() est défini pour badbit , l'exception est relancée.

Exemple

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // lit 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // lit 'e'
    char str[5];
    s1.get(str, 5);     // lit "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // lit le reste, sans inclure '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

Sortie :

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

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 Appliqué à Comportement publié Comportement corrigé
LWG 370 C++98 l'effet de la surcharge (5) était get ( s, count, widen ( ' \n ' ) ) ,
qui est l'effet de la surcharge (3)
corrigé en
get ( strbuf, widen ( ' \n ' ) )
LWG 531 C++98 les surcharges (3,4) ne pouvaient pas gérer le
cas où count est non-positif
aucun caractère n'est
extrait dans ce cas

Voir aussi

extrait des blocs de caractères
(fonction membre publique)
extrait des données formatées
(fonction membre publique)
extrait des caractères et des tableaux de caractères
(fonction template)