1

戻り値の型に対する & の目的を理解しようとしました。つまり、以下のコードを考えてみてください。演算子のオーバーロード関数から & を削除するとどうなりますか。

    class Container
{


    public:
        int numElems;
        int *data;


    Container(int n):numElems(n){data=new int [numElems];}
    Container & operator=(const Container &rhs)
    {
        if(this!=&rhs)
        {
            if(data!=NULL)
                delete  [] data;
        numElems=rhs.numElems;
        data=new int [numElems];
        for (int i=0;i<numElems;i++)
        {   
            data[i]=rhs.data[i];    
        }
            return *this;
        }
    }

};

私はそれを削除してコンパイルしましたが、エラーなしでコンパイルされました.実際には、メインの例の両方のケースで同じ結果が得られます:

int main()
{
Container a(3);
Container b(5);
Container c(1);
cout<<a.numElems<<endl;
cout<<b.numElems<<endl;
cout<<c.numElems<<endl;
a=b=c;
cout<<a.numElems<<endl;
cout<<b.numElems<<endl;
cout<<c.numElems<<endl;
return 0;
}

それで、左側の & の目的について私を助けることができる人はいますか? 前もって感謝します。

4

3 に答える 3

1
class foo {

    public:

        int val;

        foo() { }
        foo(int val) : val(val) { }

        foo& operator=(const foo &rhs) {
            val = rhs.val;
            return *this;
        }

        foo& operator++() {
            val++;
            return *this;
        }

};


void main() {
    foo f1(10), f2;
    (f2 = f1)++;
    std::cout << f1.val << " " << f2.val << std::endl;
}

出力:

10 11

参照を削除したときの出力:

10 10

于 2013-05-06T19:24:19.920 に答える
0

参照を返すことは、大きなオブジェクトの値を返すよりもはるかに高速です。これは、内部では参照は単なるメモリ アドレスであるのに対し、値で返す場合はディープ コピーが必要になるためです。

于 2013-05-06T19:03:25.637 に答える
0

参照を返さない場合は、余分な不要なコピーを暗黙的に作成します。

于 2013-05-06T19:03:52.513 に答える