Посилання призначені для створення псевдонімів об’єктів програми. Раніше ми використовували вказівники, які зберігали адреси обїектів програми, і через вказівники отримували доступ до цих об’єктів. При цьому використовували дві операції – визначення адреси (&) і звертання за адресою *. Посилання надають майже ті самі можливості, що і вказівники, але мають більш простий синтаксис.
Визначення посилання має такий синтаксис:
тип & ім’я_посилання ім’я_змінної;
При створенні посилання його необхідно ініціалізувати за допомогою імені іншого об’єкту програми. Після цього посилання буде діяти як альтернативне ім’я даного об’єкту, всі операції над посиланням в дійсності будуть виконуватися над цим об’єктом.
#include <iostream>
using namespace std;
int main( ) {
int a;
int &r = a;
a = 123;
cout << "a = " << a << endl; // 123
cout << "r = " << r << endl; // 123
r = 321;
cout << "a = " << a << endl; // 321
cout << "r = " << r << endl; // 321
}
Посилання, на відміну від вказівників, обов’язково необхідно ініціалізувати. Якщо це не зробити, виникне помилка компіляції.
Операція визначення адреси, застосована до посилання, повертає адресу об’єкту, псевдонімом якого є це посилання. В наступному прикладі на екран буде виведена адреса змінної а:
#include <iostream>
using namespace std;
int main( ) {
int a;
int &r = a;
cout << "&a = " << &a << endl;
cout << "&r = " << &r << endl;
}
Після створення і ініціалізації посилання завжди буде псевдонімом одного і того самого об’єкту:
#include <iostream>
using namespace std;
int main( ) {
int a = 123, b = 321;
int &r = a;
cout << "a = " << a << endl; // 123
r = b;
cout << "a = " << a << endl; // 321
}
Посилання може бути псевдонімом об’єкту будь-якого, в тому числі визначеного користувачем, типу. В наступному прикладі посилання є псевдонімом змінної структурного типу.
#include <iostream>
using namespace std;
int main( ) {
struct student {
int id;
int rating;
} s = { 1, 85 };
student &r = s;
cout << r.id << endl;
}