我有一个函数,它接受一个 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<<
链接的正确方式是什么?