重载流插入(<<<<")运算符?

时间:2015-04-15 00:32:55

标签: c++

当我们重载流插入操作符以处理用户定义的对象时,我们通常将其定义为全局友元函数,如下所示:

ostream& operator << (ostream& out, const MyClass& x) {
    // Do something
    return out;
}

我的问题是,我相信对象cout(它是一个全局对象)作为此函数的第一个参数传递。但为什么?它是一个全局函数,因此无论如何都可以访问它,为什么将它作为参数传递。换句话说,为什么不这样做:

ostream& operator << (const MyClass& x) {
    // Do something
    return cout;
}

1 个答案:

答案 0 :(得分:1)

有两个原因。

一个是语义:第一个参数不必是std::cout。它可以是任何 std::ostream,无论是std::cerrstd::ofstream还是std::ostringstream等等。

第二个是语法:<<必然需要两个参数,没有两个参数就没有办法写一个重载(尽管第一个参数可以是this参数)。 / p>

相关问题