В C ++ им пришла "яркая" идея перегружать операторы RightsShift и Leftshift потоками для представления сериализации / десериализации.
stream >> var
означает "чтение var из потока".
Симметрично
stream << var
означает «положить переменную в поток»
Операция «потокового» входа или выхода также возвращает поток, поэтому вы можете связывать такие операции, как:
stream >> var1 >> var2;
Обратите внимание, что «потоковая передача» была выбрана только из-за внешнего вида и потому, что приоритет считался разумным, но это все еще просто перегруженный оператор и, например, подразумевает отсутствие строгой последовательности оценки.Например, в:
stream << f() << g();
может быть функция g
вызывается (несколько неожиданно) перед функцией f
.
ПРИМЕЧАНИЕ: проблема секвенирования была решена путем добавления этого особого случая впоследний стандарт C ++ (C ++ 17).Хотя в общем случае он не выполняется, он гарантирован для операторов сдвига (предположительно по этой конкретной причине).Так что в f()+g()
может быть f
вызывается позже, чем g
, но в f()<<g()
этого не может быть.