我有一个函数,它将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;
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出是:
How are you?
Hello, world!0x601288
Run Code Online (Sandbox Code Playgroud)
但是,如果我将链接表达式分成两个语句,就像这样
int main() {
std::cout << "Hello, world!";
std::cout << print( std::cout ) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
然后我至少在输出中得到正确的顺序,但仍然得到一个十六进制值:
Hello, world! How are you?
0x600ec8
Run Code Online (Sandbox Code Playgroud)
我想了解这里发生了什么.正常函数是否优先operator<<,这就是输出顺序反转的原因?编写将数据插入到一个ostream但也可以链接的函数的正确方法是什么operator<<?