istream::getline type de retour
Ce qui ne l' istream::getline
de retour de méthode?
Je demande car j'ai vu que pour faire une boucle dans un fichier, il faut le faire comme ceci:
while ( file.getline( char*, int ) )
{
//handle input
}
Ce qui est de retour?
istream& est le type de retour.
ouais, je l'ai dit je sais déjà que. mais de toute évidence quelque chose d'étrange à ce sujet, parce que d'une certaine forme de vrai ou faux en est dérivé.
Il surcharges soit le
ouais, je l'ai dit je sais déjà que. mais de toute évidence quelque chose d'étrange à ce sujet, parce que d'une certaine forme de vrai ou faux en est dérivé.
Il surcharges soit le
bool
ou void*
opérateurs, afin que, lorsqu'il est implicitement convertie dans le if (), celle-ci peut revenir si les expressions du FOLKLORE a été atteint ou nonOriginalL'auteur | 2011-01-16
Vous devez vous connecter pour publier un commentaire.
Il renvoie un flux de données afin que nous puissions la chaîne de l'opération.
Mais lorsque vous utilisez un objet dans un contexte booléen le compilateur à la recherche d'un opérateur de conversion qui peut convertir en un type qui peut être utilisé dans le contexte booléen.
Dans ce cas, un ruisseau a
opérateur void*()
. Ainsi, un pointeur peut être utilisé dans un contexte booléen. Lorsqu'il est appelé, il vérifie les indicateurs d'erreur. Si l'une ou failbit n'badbit sont ensemble, puis il retourne la valeur NULL qui est équivalent à FALSE dans le cas contraire, elle renvoie un pointeur sur soi (ou de quelque chose de valable, mais vous ne devez pas utiliser ce fait)).De sorte que vous pouvez utiliser un flux de données dans un contexte qui aurait besoin d'un boolean test:
Note: C'est une mauvaise idée de tester le flux sur l'extérieur et ensuite en lecture/écriture à l'intérieur du corps du conditionnel/boucle de déclaration. C'est parce que l'acte de lecture peut rendre le flux de mauvais. Il est généralement préférable de ne le lire qu'une partie de l'épreuve.
OriginalL'auteur Martin York
Look de référence. Le istream retourné à partir de
getline
est converti en booléen par la conversion implicite pour vérifier le succès de l'opération. Cette conversion fait de l'utilisation deif(mystream.getline(a,b))
dans un raccourci pourif(!mystream.getline(a,b).fail())
.Ajout de précisions, peut-être que les pages ont changé au fil du temps.
Merci, je upvoted votre réponse avec ce changement.
OriginalL'auteur Öö Tiib
La fonction renvoie une référence à l'objet de flux de données elle-même, qui peut être utilisée soit à la chaîne des opérations de lecture:
ou, parce que les flux sont implicitement convertible
void *
s, dans une boucle ou d'une condition:Vous pouvez en lire plus à ce sujet sur le cplusplus.com site web:
http://cplusplus.com/reference/iostream/istream/getline/
OriginalL'auteur templatetypedef
Il retourne le flux lui-même. Le flux peut convertir (par
void*
) àbool
indiquant son état. Dans cet exemple, votrewhile
boucle prend fin lorsque le flux de la conversion àbool
va "false", ce qui arrive lorsque votre flux entre dans un état d'erreur. Dans votre code, il est plus susceptible de se produire lorsqu'il y a une tentative de lecture au-delà de la fin du fichier. En bref, il va lire tout ce qu'il y est, et puis de s'arrêter.operator bool()
(ouoperator void*()
, pas sûr)C'est
operator void*()
.OriginalL'auteur Lightness Races in Orbit
Tout le monde vous l'a dit ce qu'il est, maintenant laissez-moi vous dire, utiliser la de forme libre version
Pourquoi cette version? Il devrait être immédiatement apparent - vous passer une
std::string
plutôt que d'une taille fixe tampon de caractère!char*
au lieu d'unestd::string
? c'est la situation que je suis en.std::string
a lac_str()
méthode qui vous permettra de revenir ce que vous avez besoin, si vous avez besoin de modifier la chaîne, alors il existe des méthodes destd::string
vous pouvez utiliser pour le modifier.OriginalL'auteur Nim