случаи, когда вызывается функция перегрузки оператора присваивания

аюсь создать библиотеку для некоторой работы и использую перегрузку оператора для операции присваивания. Предположим, X и Y являются двумя экземплярами класса, который имеет перегруженный =:

A& A::operator=(A &rhs)
{
    A::assign(*this, rhs);
    return *this;
}

Когда я делаю это:

A z;
z = x + y; // x and y are other instances of class A

все хорошо, однако, когда я делаю

A p = q + r;

перегруженная процедура не вызывается. Я не очень опытен с перегрузкой операторов, может кто-нибудь объяснить, что происходит. Одним из объяснений может быть то, что p - это просто псевдоним для созданного объекта q + r, однако z создает новый экземпляр класса A, и, следовательно, перегрузка оператора срабатывает, когда z назначается. Вроде как:

#include <iostream>
using namespace std; 
class X
{
    public:
    X();
};

X::X()
{
    cout<<"called"<<endl;
}

int main(int argc, char *argv[]) 
{
    X e; X f;
    X g = e;
}

где вызванный печатается только дважды, по одному для e и f, и не печатается для g.

Если это так, может кто-нибудь предложить способ вызвать перегрузку оператора для p.

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос