簡體   English   中英

為什么重載“>>”和“<<”時需要通過引用傳遞?

[英]Why do we need passing by reference when overloading “>>” and “<<”?

我不太明白為什么我們需要在 istreams 和 ostreams 之前參考(在我的代碼中的所有 4 個)。 我有點理解為什么 function arguments 需要符號,因為不允許復制構造函數作用於 ostream 和 istream,所以它們需要引用,但是為什么指定返回類型的那些呢? 我真的無法弄清楚,而且,我無法理解為什么如果我從其中刪除與號,代碼甚至無法編譯(我收到此錯誤:錯誤:'operator<<' 的模糊重載(操作數類型是 'std::ostream' {aka 'std::basic_ostream'} 和 'foo') )。


#include <iostream>
using namespace std;

class foo
{
    int x;

 public:
    foo()
    {
        x=10;
    }
 
    friend istream& operator>>(istream& in, foo& S);
    friend ostream& operator<<(ostream& out, foo& S);
    
};

istream& operator>>(istream& in, foo& S)
    {
        in>>S.x;
        return in; 
    }

ostream& operator<<(ostream& out, foo& S)
    {
        out<<S.x;
        return out;
    }

int main()
{

    foo A, B, C;

    cin>>A;

    cout<<A;

    return 0;
}

流不可復制。 沒有引用或指針的參數通過副本傳遞。

一般來說,如果參數大於處理器的寄存器,則通過引用傳遞它,以避免復制。 大對象需要很長時間來復制,尤其是當它們不需要復制時。 這就是創建指針的原因; 指針的復制速度比大對象快。

輸入 stream 參數應通過引用傳遞,因為它們都將被修改。

object 參數應該通過常量引用傳遞,因為它不會被修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM