Ссылки в C++

User Rating: 4 / 5

В сегодняшней статье мы познакомимся с тем, что такое ссылки в языке C++. Итак, под ссылкой понимают псевдоним какой-то переменной, то есть фактически, ссылка представляет собой другое имя для уже существующей переменной. Как только ссылка инициализирована переменной, можно далее по тексту программы C++ пользоваться либо именем самой переменной, либо же этой ссылкой. Для объявления или использования ссылок на языке C++ используется знак амперсанда ( & ). 

Давайте сразу рассмотрим концепцию ссылок в языке C++ на небольшом примере, и всё сразу станет понятно:

#include <iostream>

using namespace std;

int main() {
    int a = 1500;
    char ch = 'C';
    double pi = 3.1415926535;

    int& ref_a = a;
    char& ref_ch = ch;
    double& ref_pi = pi;

    cout << "Getting the value of 'a' using reference: " << ref_a << endl;
    cout << "Getting the value of 'ch' using reference: " << ref_ch << endl;
    cout << "Getting the value of 'pi' using reference: " << ref_pi << endl;
}

Как видите, в этой небольшой программе мы объявили три переменных a, ch, pi и инициализировали их значениями (1500, 'C' и 3.1415926535). Сразу после этого мы объявили три ссылочные переменные ref_a, ref_ch, ref_pi, инициализировав их значениями a, ch и pi, соответственно. В конце функции main() мы выводим на экран консоли значения наших исходных переменных, обращаясь к ним через ссылки. Результатом работы программы будет следующий вывод на консоль:

Getting the value of 'a' using reference: 1500
Getting the value of 'ch' using reference: C
Getting the value of 'pi' using reference: 3.14159

Когда Вы видите знак амперсанда ( & ), идущий после типа данных C++, воспринимайте эту запись как "ссылка типа X на переменную Y". Таким образом, объявления ссылок выше можно прочитать следующим образом:

  • int& ref_a = a; - читается как: "ref_a - это ссылка типа int на переменную a"
  • char& ref_ch = ch; - читается как: "ref_ch - это ссылка типа char на переменную ch"
  • double& ref_pi = pi; - читается как: "ref_pi - это ссылка типа double на переменную pi"

Если вообразить себе переменную в C++ просто как участок (или область) памяти компьютера, где хранится какое-то значение, то считайте, что имя переменной - это некая "метка" с обозначением этого участка памяти. Объявляя ссылку с именем на переменную X, Вы как бы говорите: "а вот другая метка R, которая также будет ссылаться на этот же участок памяти, что и сама метка X".

Важным моментом при объявлении ссылки является то, что Вы сразу должны проинициализировать её значением. Нельзя просто задать ссылку на какой-то тип.

Если бы мы попробовали написать нашу программу без инициализации ссылочных переменных, это бы вызвало ошибку компилятора:

#include <iostream>

using namespace std;

int main() {
    int a = 1500;
    char ch = 'C';
    double pi = 3.1415926535;

    int& ref_a; // ОШИБКА компилятора: объявлена ссылка без инициализации
    char& ref_ch; // ОШИБКА компилятора: объявлена ссылка без инициализации
    double& ref_pi; // ОШИБКА компилятора: объявлена ссылка без инициализации

    cout << "Getting the value of 'a' using reference: " << ref_a << endl;
    cout << "Getting the value of 'ch' using reference: " << ref_ch << endl;
    cout << "Getting the value of 'pi' using reference: " << ref_pi << endl;
}

Отсюда можно сделать вывод, что нужно сразу инициализировать ссылочную переменную при её объявлении.

В заключение к статье скажу, что использование ссылок в программах на C++ обычно можно встретить в качестве аргументов для функций или возвращаемых значений функций.

 

Яндекс.Метрика