Почему при присвоении ссылки используется оператор присваивания копии? - PullRequest
0 голосов
/ 19 апреля 2019

Для следующего примера:

#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 Ответ

1 голос
/ 19 апреля 2019

Назначение ссылки присваивает объекту, на который ссылается ссылка, а не самой ссылке. Таким образом, ваша update функция эквивалентна:

o2 = ::o;
...