Это не избыточно, но полезно для цепочки вызовов. Это легче увидеть с помощью таких функций, как std :: string :: append, поэтому я начну с этого:
std::string mystring("first");
mystring.append(" second");
mystring.append(" third");
можно переписать как:
std::string mystring("first").append(" second").append(" third");
Это возможно, потому что .append () возвращает ссылку на измененную строку, поэтому мы можем продолжать добавлять .append (...) в конец. Код, связанный с тем, что вы делаете, меняется от этого:
std::cout << "first";
std::cout << " second";
std::cout << " third";
в это. Так как оператор << возвращает поток, мы также можем объединить их в цепочку! </p>
std::cout << "first" << " second" << " third";
видите сходство и полезность?