Devuelve una secuencia para que podamos encadenar la operación.
Pero cuando utiliza un objeto en un contexto booleano, el compilador busca un operador de conversión que pueda convertirlo en un tipo que pueda usarse en el contexto booleano.
En este caso, el flujo tiene operator void*()
. Como esto da como resultado un puntero, puede usarse en un contexto booleano. Cuando se lo llama, comprueba los indicadores de error. Si se configuran failbit o badbit, entonces devuelve NULL, que es equivalente a FALSE; de lo contrario, devuelve un puntero a self (o algo válido pero no debe usar este hecho)).
esta manera puede utilizar una corriente en cualquier contexto que requeriría una prueba booleana:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
Nota: Es mala idea probar la corriente en el exterior y luego leer/escribir en él el interior del cuerpo de la declaración condicional/loop. Esto se debe a que el acto de leer puede hacer que la transmisión sea mala. Por lo general, es mejor leerlo como parte de la prueba.
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
istream & es el tipo de devolución. – DumbCoder
Sí, debería haber dicho que ya lo sé. pero obviamente algo es extraño al respecto, porque de él se deriva alguna forma de verdadero o falso. –
Sobrecarga los operadores 'bool' o' void * 'para que cuando se muestre implícitamente en la condición if(), pueda devolver si se ha alcanzado el EOF o no – Cameron