Я прочитал много статей о оптимизации возвращаемого значения. Тем не менее, я не уверен, чтобы полностью понять, если это то, что происходит в следующем случае (адрес фактически всегда идентичен): неОптимизация возвращаемого значения при возврате по ссылке
#include "stdafx.h"
class Type
{
public:
Type(int a) { m_a = a; }
private:
Type(const Type & other) {}
int m_a;
};
class Base
{
public:
Base() : instance(42) {}
virtual Type & GetType()
{
printf("Base: Address of instance: %i\n", &instance);
return instance;
}
private:
Type instance;
};
class Derived : public Base
{
public:
virtual Type & GetType()
{
printf("Derived\n");
return Base::GetType();
}
};
int main()
{
printf("Base class\n");
Base b;
printf("Main: Address of instance: %i\n", &(b.GetType()));
printf("\nDerived class\n");
Derived d;
printf("Main: Address of instance: %i\n", &(d.GetType()));
}
ли возвращения по ссылке всегда обеспечивает не конструктор копирования называется?
Или RVO происходит здесь?
Спасибо за издание. Сначала я говорил о «каскадировании», поскольку мой фактический прецедент был для «рекурсивного» возвращения ссылки через иерархию наследования. Но в конце вопрос фактически не зависит от наследования, что теперь отражается в отредактированном заголовке. –