D’après ce que j’ai lu, getline()
utilisé dans un contexte booléen renvoie implicitement une conversion en void*
. Je n’ai trouvé nulle part sur le Web une référence réelle à cette déclaration. Partout, il est écrit que la conversion implicite n’existe pas et que, dans un contexte booléen, les pointeurs doivent être du même type (et si ptr == 0
0
est converti en type du pointeur ptr
).
Toujours dans la norme, dans un contexte booléen, il est converti en type non spécifié-Boolean. Qu’est ce que ça veut dire?
Cela signifie que vous pouvez utiliser getline()
dans une instruction if et si cela fonctionne, vous entrez le bloc de l’instruction if
.
getline()
utilisé dans un contexte booléen renvoie une conversion implicite àvoid*
.
Ce qui précède n’est pas techniquement correct (mais c’est le résultat). getline()
renvoie en fait une référence au stream sur getline()
il a été utilisé. Lorsque le stream est utilisé dans un contexte booléen, il est converti en un type non spécifié (C ++ 03) pouvant être utilisé dans un contexte booléen. En C ++ 11, cela a été mis à jour et il est converti en bool
.
getline()
réussit, elle renvoie un stream en bon état. Lorsque cela est converti en un type de type bool
il retourne un pointeur non nul (C ++ 03) qui, lorsqu’il est utilisé dans un contexte booléen, est équivalent à true
. getline()
échoue, elle renvoie un stream en mauvais état. Lorsque cela est converti en un type bool
il retourne un pointeur null (C ++ 03) qui, lorsqu’il est utilisé dans un contexte booléen, est équivalent à false
. Je n’ai trouvé nulle part sur le Web une référence réelle à cette déclaration.
Partout, il est écrit que la conversion implicite n’existe pas et que, dans un contexte booléen, les pointeurs doivent être du même type (et si
ptr == 0
0
est converti en type du pointeurptr
).
Un void*
nul void*
dans un contexte booléen équivaut à false
, tout autre void*
équivaut à true
. (Bien que le type ne soit en réalité pas spécifié, mais vous pouvez le considérer comme un void*
(juste pour le rendre plus facile à penser).
Toujours dans la norme, dans un contexte booléen, il est converti en type non spécifié-Boolean. Qu’est ce que ça veut dire?
Cela signifie que vous pouvez utiliser toutes les instructions conditionnelles:
if (getline()) { // If getline worked processes data } while(getline()) { // getline. If it works then processes then try again. }
Il ne le dit pas explicitement n’importe où sur le Web, car il implique de rassembler trois faits différents.
getline()
renvoie istream&
istream
est convertible en void*
istream
est utilisé dans un contexte booléen (tel qu’une instruction if
ou while
).