Зачем нужны ссылки — псевдонимы переменных
Познакомьтесь со ссылками как с псевдонимами времени компиляции, которые нельзя переназначить или сделать нулевыми.
«Зачем нужны ссылки — псевдонимы переменных» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Зачем нужны ссылки — псевдонимы переменных
- Передача по значению и по ссылке
- Ссылки const и когда их использовать
- Время жизни ссылок и висячие ссылки