簡體   English   中英

使用cout到對象,為什么我們需要通過引用調用

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

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