[英]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.