Что такое возвращаемое значение «stringstream >> something»? Например, возвращаемое значение «stringstream_obj >> int_obj». Я понимаю, что возвращаемый тип все еще является потоком из-за «istream & operator >> (int & val)». Но какова ценность? Чтобы быть конкретным, вот мой код.Что такое возвращаемое значение «stringstream >> something»?
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main (void)
{
stringstream sss(string("0"));
int num;
if (sss >> num) // don't understand here
cout << "true" << endl;
else
cout << "false" << endl;
//output "true"
return 0;
}
В качестве комментария, почему вывод верен? Sss содержит только 1 символ. После «sss >> num» возвращаемый «stringstream» должен иметь пустой контент, поэтому значение скобки должно быть ложным.
Оценил,
Благодарности @GillBates. Здесь я немного смущен состоянием отказа в stringstream и его ошибкой. Поскольку содержимое sss «дренируется» с помощью «sss >> num», sss входит в состояние отказа, которое блокирует дальнейшее использование этого объекта потока. Является ли состояние сбоя считающимся ошибкой? Или как они отличаются? –
@leonardo_zz - Чтение удалось извлечь номер, поэтому он не подвел. Тот факт, что он также достиг eof, может быть проверен 'sss.eof()', но сам по себе не является ошибкой. –
Спасибо @ BoPersson. Я понимаю, что чтению удалось извлечь «0». Меня смущает термин «состояние отказа» строкового потока, как показано в [состоянии отказа] (http://stackoverflow.com/questions/41627448/c-why-re-input-stringstream-doesnt-work-the -поперечник-остается-The-же). Состояние сбоя запускается после того, как содержимое потока строк сливается (т. Е. Eof достигнуто.), Хотя последний символ успешно извлечен. В состоянии сбоя строковый поток больше не может быть записан. Кажется, что это состояние отказа не считается ошибкой. Я прав? Оценил –