何时通过引用传递并返回c ++中的函数

Dhr*_*wat 4 c++

首先,我在c ++中创建了一个复杂的类,它有两个成员数据--real和imaginary.(形式为a + ib).当我试图为复杂类对象重载<<运算符如下 -

friend ostream operator<<(ostream ,complex );  in .h file

ostream operator <<(ostream o,complex c){

    o<<"real part"<<c.real;
    o<<"imaginary part<<c.imaginary;
    return o;

}  
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中,它不起作用,而是打开一个ios_base文件并在那里显示错误.但是当我通过引用传递并通过引用返回如下时,相同的代码会完美地重载<<

ostream& operator <<(ostream& o,complex& c)
{



      //same as before
};
Run Code Online (Sandbox Code Playgroud)

我不明白通过引用传递和返回有什么帮助?

For*_*veR 8

std :: ostream不可复制的类型.您不能复制o,因此您必须通过引用收到它并通过引用将其返回.