У меня есть функция, которая принимает ostream
в качестве аргумента, записывает некоторые данные в поток, а затем возвращает ссылку на этот же поток, как это:
#include <iostream>
std::ostream& print( std::ostream& os ) {
os << " How are you?" << std::endl;
return os;
}
int main() {
std::cout << "Hello, world!" << print( std::cout ) << std::endl;
}
На выходе получается:
How are you?
Hello, world!0x601288
Однако, если я разделяю выражения цепочки на два оператора, как это
int main() {
std::cout << "Hello, world!";
std::cout << print( std::cout ) << std::endl;
}
то я хотя бы получаю правильный порядок на выходе, но все равно получаю шестнадцатеричное значение:
Hello, world! How are you?
0x600ec8
Я хотел бы понять, что здесь происходит. Неужели обычная функция имеет приоритет над operator<<
, и поэтому порядок вывода меняется на противоположный? Как правильно написать функцию, которая вставляет данные в ostream
, но при этом может работать с operator<<
?