Основы · Первые программы

Ссылки и const

Передаём данные без копирования и запрещаем лишние изменения

~25 мин 7 шагов

После урока ты сможешь

  • Отличать передачу по значению от передачи по ссылке
  • Передавать большие объекты как const&
  • Изменять аргумент через ссылку, когда это действительно нужно

Шаг 1 из 7

Ссылка — второе имя переменной

В прошлом уроке функция получала копию аргумента и не могла изменить оригинал. Иногда это ровно то, что нужно. Но бывает, что функция должна поменять переменную вызывающего: обменять два значения, начислить бонус, нормализовать строку. Для этого есть ссылки.

Ссылка — это другое имя для уже существующей переменной. Не копия, а та же самая ячейка памяти:

main.cpp
#include <print>
​
int main() {
    int score = 10;
    int& alias = score;   // alias — второе имя для score
​
    alias += 5;
    std::println("score = {}", score);   // 15
}

int& читается как «ссылка на int». Ссылку обязательно привязывают к переменной при создании, и перепривязать её потом нельзя: она всю жизнь будет вторым именем той же переменной.

Проверь себя

Что выведет программа?

main.cpp
#include <print>
​
int main() {
    int a = 1;
    int& r = a;
    r = 5;
    std::println("{}", a);
}
Enter — проверить, Shift+Enter — новая строка