为什么分配给参考使用副本分配运算符?

时间:2019-04-19 18:55:08

标签: c++ c++11 reference copy-assignment

对于以下示例:

#include <iostream>

using namespace std;

class Obj {
    public:
        Obj& operator=(const Obj& o) {
            cout << "Copy assignment operator called" << endl;
            return *this;
        }
};

Obj o;

int update(Obj& o) {
    o = ::o;
}

int main() {
    Obj o2;
    update(o2);
}

我得到结果:

Copy assignment operator called

为什么在将对象分配给引用时使用副本分配?为什么引用不仅仅更新为指向分配的对象?这是惯例问题还是背后的原因?

1 个答案:

答案 0 :(得分:1)

分配给引用会分配给引用所引用的对象,而不是引用本身。因此,您的update函数等效于:

o2 = ::o;