Возможный дубликат:
Как справка реализована внутри?
void f (int& a)
{
a ++;
}
int main ()
{
int b = 5;
f(b);
cout << b << endl; //prints 6
}
Когда я увидел синтаксис для ссылок в C ++, он первоначально выглядел так, как будто переменная b (если бы это был объект) была бы скопирована в f. Как эти ссылки на самом деле работают под капотом? (Какой-нибудь простой asm был бы великолепен.)
В этом случае передача по ссылке, скорее всего, использует семантику указателя — то есть адрес объекта, вероятно, передается в качестве параметра. \
Когда я увидел синтаксис для ссылок в C ++, он первоначально выглядел так, как будто переменная b (если бы это был объект) была бы скопирована в f.
Нету. Это один из достоинств ссылок — без копирования.
f(b);
00DF1405 lea eax,[b]
00DF1408 push eax
00DF1409 call f (0DF1177h)
00DF140E add esp,4
eax
будет содержать адрес b
, а затем помещается в стек аргументов функции.
Под капотом в C ++ ссылки реализованы в точности как указатели. Единственное отличие — некоторые проверки времени компиляции и другой синтаксис.
Таким образом, в вашем случае функция f получает «указатель» на целое число b и увеличивает значение b.