Посилання (reference) – особливий тип даних, що є прихованою формою вказівника, який при зверненні автоматично розіменовується. Посилання можна розглядати як ще одне ім'я об'єкту.
Посилання головним чином використовуються для задання аргументів і значень, що повертаються функціями. Запис:
type &reference_name
позначає оголошення посилання на об'єкт типу type.
Наприклад:
int i = 1;
int &r = i; // r та i посилаються на одне і те ж ціле
int x = r; // x = 1
r = 2; // i = 2;
Посилання обов'язково має бути ініціалізоване, тобто повинно бути щось, ім'ям чого воно є. Ініціалізація посилання – це у жодному випадку не операція присвоювання.
Ніякі операції над посиланнями не виконуються. Наприклад:
int ii = 0;
int &rr = ii;
rr++; // ii збільшується на 1
int *pp = &rr; // pp вказує на ii
Графічно зв'язки між змінною ii, посиланням rr та вказівником pp представлені на мал. 2.1.
Малюнок 2.1 Зв'язки між змінною, посиланням та вказівником |
Операція ++ над посиланням допустима, але вираз rr++ не збільшує саме посилання rr; натомість операція ++ застосовується до цілого, тобто до змінної ii. Отже, після ініціалізації значення посилання не може бути змінено: воно завжди вказує на той об'єкт, до якого було прив'язане при його ініціалізації.
Щоб одержати адресу об'єкту, який позначений посиланням rr, треба написати &rr.