Seguo il primer libro C++, e sono incuriosito circa il seguente esempio di codice:La seconda condizione in (cin >> buf &&! Buf.empty()) è ridondante?
string buf;
while (cin >> buf && !buf.empty()) {
if (buf[0] != '_')
continue; // get another input
//the input starts with an underscore; process buf . . .
}
il ciclo deve ignorare le parole che non iniziano con un underscore e fare qualcosa con quelli che iniziano con un carattere di sottolineatura .
La mia domanda riguarda la condizione
(cin >> buf && !buf.empty())
direi che la condizione (! Buf.empty()) è sempre vero quando (cin >> BUF) è vero, quindi non vedo il punto di aggiungerlo. C'è qualche caso quando la seconda condizione non è ridondante?
C'è una domanda precedente sullo stack overflow su una costruzione simile (Is it possible to read an empty string from cin and still get true from cin.good()?) la cui risposta è semplicemente no (la seconda condizione è ridondante).
Se questo è corretto, perché è sul libro? È semplicemente un errore? Oppure c'è qualche situazione particolare in cui la doppia condizione ha senso?
Ebbene secondo la domanda si è collegato , la seconda condizione è ridondante. In realtà, la tua domanda sembra quasi un duplicato di quello. –
È molto strano essere nel libro allora. Sembra che ci sia qualche situazione speciale in cui questa costruzione è utile. –
Questa condizione non è necessaria affatto. Il tuo autore si sbaglia sulle condizioni di errore di 'std :: operator >> (std :: istream &, std :: string &)'. – 0x499602D2