当我们重载流插入操作符以处理用户定义的对象时,我们通常将其定义为全局友元函数,如下所示:
ostream& operator << (ostream& out, const MyClass& x) {
// Do something
return out;
}
我的问题是,我相信对象cout
(它是一个全局对象)作为此函数的第一个参数传递。但为什么?它是一个全局函数,因此无论如何都可以访问它,为什么将它作为参数传递。换句话说,为什么不这样做:
ostream& operator << (const MyClass& x) {
// Do something
return cout;
}
答案 0 :(得分:1)
有两个原因。
一个是语义:第一个参数不必是std::cout
。它可以是任何 std::ostream
,无论是std::cerr
,std::ofstream
还是std::ostringstream
等等。
第二个是语法:<<
必然需要两个参数,没有两个参数就没有办法写一个重载(尽管第一个参数可以是this
参数)。 / p>