Посилання (reference), на відміну від покажчика, завжди є типізованим, бо воно посилається на певний об’єкт. Воно може бути іменованим або неіменованим (не явним). Для створення іменованого посилання необхідно записати відповідне оголошення. Формат такого оголошення має вигляд:
тип & ім'я = Lvalue;
Тут ім'я - іменоване посилання, що оголошується, Lvalue - вираз виду Lvalue. Приклад оголошення посилання R на змінну A типу float:
float A;
float& R=A;
Іменоване посилання являє собою ім'я (можливо додаткове) деякого об'єкта. Не іменовані посилання застосовуються для тимчасового посилання на об’єкт. Приклад використання не іменованого посилання:
float* p = new float[100];
*(p+2) = a+b+c;
Ліворуч в останньому рядку записане неявне посилання на третій елемент динамічного масиву, адреса масиву надається покажчиком p .
При використанні посилань необхідно враховувати наступні правила.
1. Оголошення змінної-посилання повинне включати її ініціалізацію, крім випадків, коли вона є параметром функції або описана як extern або є компонентом класу.
2. Значення посилання після ініціалізації не може бути змінено.
3. Посилання завжди має певний тип.
4. Посилання на покажчик об’являти можна, але покажчик на посилання - ні. Наприклад, запис
double*& a = p;
є припустимим, якщо покажчик p має тип double*. А такий запис:
double&* x;
є помилковий.
5. Не можна створювати масив посилань.
6. Посилання не є об'єктом, воно не займає місце у пам'яті.
Основні області застосування посилань:
- параметри функцій;
- значення, що повертає функція;
- робота з динамічними об'єктами.
Використання посилання як параметру функції або значення, що повертається, буде розглянуто пізніше, у главі, присвяченій функціям.
Вправи
Вправа 1
Маємо такий фрагмент програми: