Element zadeklarowany w języku C++ zapisem int &r = x; to
Znak & w deklaracji, po typie, tworzy referencję - drugą nazwę dla istniejącej zmiennej. Po zapisie int &r = x; nazwy r i x oznaczają tę samą komórkę pamięci: instrukcja r = 5; zmieni także x. Referencję trzeba zainicjować od razu przy deklaracji i nie da się jej później przepiąć na inną zmienną. Najczęściej używa się jej w parametrach funkcji, np. void zamien(int &a, int &b), żeby funkcja mogła zmienić zmienne, z którymi ją wywołano, bez kopiowania. Do zapamiętania: & przy typie w deklaracji to referencja, * przy typie to wskaźnik, a & przed nazwą zmiennej w wyrażeniu to pobranie adresu.
Kłopot sprawia tu znak &, który w C++ ma kilka znaczeń. Wskaźnik deklaruje się gwiazdką, int *p = &x;, i jest osobną zmienną przechowującą adres - żeby dostać się do wartości, trzeba go wyłuskać zapisem *p. Referencja nie ma własnego adresu do odczytania i używa się jej jak zwykłej zmiennej. Kopia powstałaby przy zapisie int r = x; bez znaku & - wtedy zmiana r nie wpływałaby na x. Pobranie adresu jako liczby to z kolei działanie operatora & w wyrażeniu, np. &x, a nie w deklaracji z typem. W przedstawionym zapisie & stoi po typie int, więc r staje się inną nazwą tej samej zmiennej x, czyli jej referencją. Kolejność znaków ma więc znaczenie: znak ampersand po typie w deklaracji tworzy referencję, a ten sam znak przed nazwą zmiennej w wyrażeniu pobiera jej adres.