[英]Using cout to an object,why do we need to call by reference
在下面的示例中,我想知道為什么我們通過引用ostream來使用調用。 我刪除了&但是沒有得到錯誤消息時出錯。
class MyArray{
private:
int x[10];
public:
MyArray(int n)
{
for (int i = 0; i < 10; i++)
x[i] = n;
}
friend ostream& operator<<(ostream& pa, MyArray ob);
};
ostream& operator<<(ostream& pa, MyArray ob)
{
for (int i = 0; i < 10; i++)
pa << ob.x[i];
return pa;
}
int main()
{
MyArray a(5);
cout << a;
return 0;
}
std::ostream
沒有“可訪問”的移動或復制構造函數。 從C ++ 11開始,復制構造函數被deleted
,甚至移動構造函數也protected
。
按值返回時,(即使發生復制省略,也需要移動/復制構造函數):
ostream operator<<(ostream& pa, MyArray ob){
for (int i = 0; i < 10; i++)
pa << ob.x[i];
return pa; //Move or Copy Constructor is required.
}
.............
std::ostream
應該是執行高級流輸出操作的對象的基類。 它意味着是控制流緩沖區的對象的基類。
復制std::cout
是沒有意義的,因為它是一個資源,它被指定來控制一個流緩沖區,負責將字符發送到程序的標准輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.