Zwraca odwołanie - referencje do int. Odniesienia są podobne do wskaźników, ale z pewnymi ważnymi rozróżnieniami. Polecam przeczytać o różnicach między wskaźnikiem, odwołaniami, obiektami i prymitywnymi typami danych.
"Effective C++" i "More Effective C++" (oba autorstwa Scotta Meyersa) mają kilka dobrych opisów różnic i kiedy używać wskaźników vs odniesień/ czasami też nazywane odwołanie.
EDIT: Istnieje wiele odpowiedzi mówiących w stylu "referencje są tylko syntactic sugar dla łatwiejszej obsługi wskaźników".
Spójrz tutaj
int a = 3;
int b = 4;
int* pointerToA = &a;
int* pointerToB = &b;
int* p = pointerToA;
p = pointerToB;
printf("%d %d %d\n", a, b, *p); // wypisze 3 4 4
int& referenceToA = a;
int& referenceToB = b;
int& r = referenceToA;
r = referenceToB;
printf("%d %d %d\n", a, b, r); // wypisze 4 4 4