У меня есть функция, которая принимает ссылку 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<<
?