Вы не можете использовать
std::ostream &operator<<(std::ostream output, std::string &label);
, поскольку std::ostream
не имеет конструктора копирования.
Даже если std::ostream
имеет конструктор копирования, использование вышеуказанного интерфейса вызовет следующие проблемы.
Задача 1
Возврат ссылки на входной аргумент будет проблемой. Объект не будет жив после того, как функция вернется. Следовательно, возвращаемая ссылка будет зависать, как только функция вернется. Использование висячей ссылки может привести к неопределенному поведению.
Задача 2
Это гипотетически.
Представьте, что случилось бы, если бы вы использовали:
std::ofstream outfile("myoutput.txt");
outfile << "A string.";
Вызов приведет к нарезке объектов. Вы потеряете std::ofstream
-ность объекта. Где будет выход в этой функции? Это конечно не пойдет в файл.
Палка с
std::ostream &operator<<(std::ostream &output, std::string const& label);
PS Да, я изменил тип второго аргумента на const&
.