śledzę C++ książkę startera i dostał ciekawi poniższym przykładzie kodu:Czy drugi warunek w (cin >> buf &&! Buf.empty()) jest nadmiarowy?
string buf;
while (cin >> buf && !buf.empty()) {
if (buf[0] != '_')
continue; // get another input
//the input starts with an underscore; process buf . . .
}
Pętla powinna ignorować słów, które nie zaczynają się od znaku podkreślenia i coś zrobić z tymi, które mają rozpocząć się od podkreślenia .
Moje pytanie jest o kondycji
(cin >> buf && !buf.empty())
Powiedziałbym, że warunek (! Buf.empty()) jest zawsze prawdziwe, gdy (cin >> buf) jest prawdziwe, więc nie widzę punkt dodania. Czy jest jakiś przypadek, gdy drugi warunek nie jest zbędny?
Istnieje poprzednie pytanie dotyczące przepełnienia stosu o podobnej konstrukcji (Is it possible to read an empty string from cin and still get true from cin.good()?), którego odpowiedź jest po prostu nie (drugi warunek: jest nadmiarowy).
Jeśli tak, dlaczego jest w książce? To po prostu błąd? Czy jest jakaś wyjątkowa sytuacja, w której podwójny warunek ma sens?
Dobrze zgodnie z pytaniem jesteś powiązany drugi warunek jest zbędny. W rzeczywistości twoje pytanie prawie wydaje się duplikatem tego. –
To jest bardzo dziwne być w tej książce. Wydaje się, że istnieje pewna szczególna sytuacja, w której ta konstrukcja jest przydatna. –
Ten warunek nie jest w ogóle potrzebny. Twój autor myli się co do warunków awarii 'std :: operator >> (std :: istream &, std :: string &)'. – 0x499602D2