C++ Academy · Урок

Зачем нужны ссылки — псевдонимы переменных

Познакомьтесь со ссылками как с псевдонимами времени компиляции, которые нельзя переназначить или сделать нулевыми.

Урок 1 из 413 шагов

«Зачем нужны ссылки — псевдонимы переменных» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Что такое ссылка

Ссылка — это псевдоним другой переменной, известный во время компиляции. Это не указатель и не копия — это тот же объект под другим именем.

Синтаксис ссылок

Используйте & после типа. Ссылки необходимо инициализировать при объявлении, и их нельзя переназначить.

int x = 10;
int& ref = x;     // ref is an alias for x
ref = 20;         // x is now 20

Сравнение с указателями

Ссылки и указатели обеспечивают косвенный доступ, но:

  • Ссылки необходимо инициализировать; указатели могут быть нулевыми
  • Ссылки нельзя переназначить на другой объект
  • Ссылки никогда не используют * или -> — они выглядят как обычные переменные

Невозможность переназначения

После связывания ссылка всегда обозначает тот же объект. Присваивание ей изменяет базовое значение, а не саму ссылку.

int a = 1, b = 2;
int& r = a;
r = b;       // a becomes 2, r still refers to a

У ссылок тот же адрес

Ссылка ведёт себя так, будто это исходная переменная. Получение её адреса даёт адрес объекта, на который она ссылается.

int x = 42;
int& r = x;
std::cout << (&r == &x);   // 1 (true)

Константные ссылки

Константная ссылка — это псевдоним только для чтения. Она полезна при передаче больших объектов без копирования.

void print(const std::string& s) {
    std::cout << s;  // can read, not modify
}

Связывание константных ссылок с временными объектами

Константная ссылка продлевает время жизни временного объекта до времени жизни самой ссылки — это удобно в выражениях.

const std::string& greeting = std::string("Hi");
std::cout << greeting;  // valid

Ссылки как возвращаемые типы

Функции могут возвращать ссылки — это полезно для цепочек вызовов или для прямого доступа к члену объекта. Будьте осторожны и не возвращайте ссылку на локальную переменную!

int& at(std::vector<int>& v, size_t i) {
    return v[i];
}

at(v, 0) = 99;   // modifies v[0]

Никогда не возвращайте ссылку на локальную переменную

Локальная переменная уничтожается при возврате из функции; ссылка становится висячей. Это неопределённое поведение.

// BUG
int& bad() {
    int x = 10;
    return x;  // x dies here
}

Ссылки в цикле for по диапазону

Цикл for по диапазону неявно использует ссылки. auto& получает ссылку, а auto — копию.

Ссылки в структурированных привязках

Структурированные привязки C++17 могут выполняться по значению, по ссылке или по константной ссылке.

std::pair<int, int> p = {1, 2};
auto [a, b] = p;            // copies
auto& [x, y] = p;           // references — modifying x changes p.first

Быстрая проверка

Почему ссылку нельзя позже переназначить на другую переменную?

Итоги

Ссылка — это псевдоним, известный во время компиляции, который необходимо инициализировать и нельзя переназначить. Она выглядит как обычная переменная, никогда не бывает нулевой и не переназначается. Используйте константные ссылки для представлений только для чтения.

Можно начать бесплатно

Изучай C++ с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «Зачем нужны ссылки — псевдонимы переменных» бесплатный?

Да — полный текст урока «Зачем нужны ссылки — псевдонимы переменных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужны ссылки — псевдонимы переменных»?

Познакомьтесь со ссылками как с псевдонимами времени компиляции, которые нельзя переназначить или сделать нулевыми. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужны ссылки — псевдонимы переменных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны ссылки — псевдонимы переменных
  2. Передача по значению и по ссылке
  3. Ссылки const и когда их использовать
  4. Время жизни ссылок и висячие ссылки
← Назад к C++ Academy