overload operator c++ operator-overloading istream

operator overloading c++



¿Por qué el objeto istream se puede usar como una expresión bool? (2)

¿Alguien sabe por qué el objeto istream se puede usar como expresión bool? Por ejemplo:

ifstream input("tmp"); int iValue; while (input >> iValue) //do something;

Aquí input >> iValue devuelve una referencia al objeto ifstream. Quiero saber por qué este objeto se puede usar como una expresión bool.
Miro en la clase ifstream y encuentro que esto puede deberse a la siguiente función de miembro:

operator void * ( ) const;

Vea here para detalles sobre esta función.
Si es así, ¿alguien puede explicarme esta función? El prototipo de esta función es diferente de la declaración de sobrecarga del operador habitual. ¿Cuál es el tipo de devolución de esta función?
Si no es así, ¿cuál es la razón por la cual el objeto ifstream se puede usar como expresión bool?
Espero su ayuda!

cheng


El mecanismo exacto que permite el uso de una istream como expresión booleana, se modificó en C ++ 11. Anteriormente se trataba de una conversión implícita a void* , como has encontrado. En C ++ 11, en cambio, es una conversión explicit a bool .

El uso de un istream o ostream en una expresión booleana se habilitó para que los programadores de C ++ pudieran continuar usando una expresión con efectos secundarios como condición de un while o for ciclo:

SomeType v; while( stream >> v ) { // ... }

Y la razón por la que los programadores hacen eso y quieren eso, es que brinda un código más conciso, un código que es más fácil de asimilar de un vistazo que, por ejemplo ...

for( ;; ) { SomeType v; stream >> v; if( stream.fail() ) { break; } // ... }

Sin embargo, en algunos casos, incluso una estructura tan prolija puede ser preferible. Depende.

Saludos y hth.,


Es un operador de reparto para el tipo dado. operator T () es un operador de conversión al tipo T. En la sentencia if , ifstream se convierte en void* , y luego el void* convierte en bool .