Restituisce uno stream in modo da poter concatenare l'operazione.
Ma quando si utilizza un oggetto in un contesto booleano, il compilatore cerca un operatore di conversione che può convertirlo in un tipo che può essere utilizzato nel contesto booleano.
In questo caso il flusso ha operator void*()
. Dato che questo risulta in un puntatore, può essere utilizzato in un contesto booleano. Quando chiamato controlla i flag di errore. Se vengono impostati failbit o badbit, restituisce NULL che è equivalente a FALSE, altrimenti restituisce un puntatore a self (o qualcos'altro valido anche se non si dovrebbe usare questo fatto)).
in modo da poter usare un getto in qualsiasi contesto che richiederebbe un test booleano:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
Nota: E 'pessima idea di testare il flusso verso l'esterno e quindi leggere/scrivere su di esso all'interno del corpo dell'istruzione conditional/loop. Questo perché l'atto di leggere può rendere il flusso cattivo. Di solito è meglio fare la lettura come parte del test.
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
fonte
2011-01-16 22:17:47
istream ed è il tipo di ritorno. – DumbCoder
sì, avrei dovuto dire che lo so già. ma ovviamente c'è qualcosa di strano, perché da esso deriva una qualche forma di vero o falso. –
Sovrastude gli operatori 'bool' o' void * 'in modo che quando viene implicitamente lanciato nella condizione if(), può restituire se EOF è stato raggiunto o meno – Cameron