Działanie obiektu cin jako warunku w pętli while()

0

Pierwszy raz zdarzyło mi się użyć obiektu cin w przedstawiony niżej sposób. Szczerze mówiąc zrobiłem to bardziej "intuicyjnie", niż świadomie. Dlatego też pojawiły się pewne wątpliwości. Jest to rozwiązanie prostego zadania ze SPOJ'a, poprawne.

#include<iostream>
using namespace std;
int main()
{
        signed short n, sum=0;
        while(cin>>n)
        {
                sum+=n;
                cout << sum << "\n";
        }
        return 0;
}

Jak działa tu cin ? Czy to operator >> zwraca wartości bool true/false ? Skąd ten warunek "wie", kiedy kończy się wejście, a zarazem, kiedy zakończyć pętlę ?

Na ten prosty warunek wpadłem po prostu w ten sposób: "niech while() działa, dopóki przyjmowanie są liczby na wejście". Więc wstawiłem tam cin>>n i zadziałało :)

2

Operator >> zwraca strumień (samego siebie), ale dodatkowo przeładowuje operator konwersji do bool void*, dzięki czemu jest niejawnie do niego w tym while konwertowany.
Posiada również operator !, jeżeli chciałbyś sprawdzić czy nie jest ustawiona flaga fail/badbit.

1 użytkowników online, w tym zalogowanych: 0, gości: 1