Раньше я думал, что возвращение значения по ссылке от возвращения значения по указателю отличается тем, что в первом случае не нужно будет делать разыменование указателя, но, видимо, это не так. Я написал вот такой пример:
#include <iostream>
int& func(int &a)
{
std::cout << &a << "\n\n";
return a;
}
int main()
{
int a;
int b;
b = func(a);
std::cout << &b << "\n\n";
std::cout << &a << "\n\n";
return 0;
}
Я думал, что выведется три одинаковых адреса, но это не так. Если сделать возврат по значению, то результат будет идентичный. Для чего тогда вообще нужен возврат значения по ссылке?
Если мы возвращаем указатель на переменную, то в caller-е она имеет тот же адрес (мы его и вернули) и информацию по этому адресу, однако адрес указателя уже будет другим. Если мы возвращаем переменную по ссылке, то адрес у этой переменной в caller-е уже другой, такой же остаётся только информация. Почему и зачем?