Надеюсь, это поможет:
iss: 1 2 3
Итерация 1
iss: 1 2 3 (Изначально)
n = 1
iss: 2 3
// * 1 напечатано
Итерация 2:
iss: 2 3 (Изначально)
n = 2
iss: 3
// * 2печатается
Итерация 3
iss: 3
n = 3
iss: ''
Итерация 4
iss: ''
n не изменено // Флаг установлен для eof of iss, поскольку нет дальнейшего ввода из потока
iss: ''
И, как справедливо отмечено в приведенном выше постеwhile (iss) не отличается от while (iss.eof ()).
Внутренне функция (istream :: operator >>) обращается к входной последовательности, сначала создав объект sentry (сnoskipws установлен в false [Это означает, что пробел является разделителем, и ваш список будет 1,2,3]).Затем (если хорошо [здесь eof не достигнут]), он вызывает num_get :: get [Получить следующее целое число] для выполнения операций извлечения и синтаксического анализа, регулируя внутреннюю часть потокагосударственные флаги соответственно.Наконец, он уничтожает часовой объект перед возвратом.
См .: http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/