0Pricing
C++ Academy · Урок

Ссылки const и когда их использовать

Передавайте большие объекты эффективно и безопасно с помощью ссылок const.

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

Что гарантирует константная ссылка

const T& означает: «Я не буду изменять объект, на который ссылаюсь». Компилятор это обеспечивает.

void print(const std::string& s) {
    // s.clear();   // ERROR: s is const
    std::cout << s;
}

Почему бы просто не передавать по значению

Копирование больших объектов расточительно. Константная ссылка практически бесплатна (внутри это всего лишь указатель) и никогда не позволяет функции изменить данные вызывающего кода.

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

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

void f(const std::string& s);
std::string a = "hi";
f(a);                 // lvalue
f("hello");           // temporary string
f(std::move(a));      // rvalue

Продление времени жизни

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

const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`

Когда NOT следует использовать константную ссылку

Для типов, которые тривиально копируются (int, числа двойной точности, pointer), используйте передачу по значению. Ссылка добавляет косвенную адресацию и ничего не даёт взамен.

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

Канонический цикл только для чтения. Он предотвращает и копирование, и случайное изменение данных.

for (const auto& x : container) {
    process(x);
}

Возврат константной ссылки

Возвращайте константную ссылку, когда результатом является существующий объект, который вызывающий код не должен изменять (элемент или кэшированное значение).

class Person {
    std::string name_;
public:
    const std::string& name() const { return name_; }
};

Корректное использование const

Помечайте как const каждый параметр и каждую функцию-член, которые не изменяют состояние. Компилятор обнаружит случайные записи — это мощный уровень защиты.

Константные функции-члены

Функция-член, после списка параметров помеченная как const, не может изменять объект. Такие функции вызываются для константных экземпляров.

class Counter {
    int n_ = 0;
public:
    int value() const { return n_; }   // pure reader
    void increment() { n_++; }
};

Проблема: const_cast снимает константность

С помощью const_cast можно убрать константность, но применение этого к изначально константному объекту приводит к неопределённому поведению. Используйте это только при взаимодействии с устаревшими API, не использующими const.

mutable для внутреннего состояния

Ключевое слово mutable позволяет константной функции-члену изменять определённые члены — это полезно для кэширования или мьютексов.

class Cache {
    mutable std::mutex mtx_;
    mutable std::optional<int> cached_;
public:
    int value() const {
        std::lock_guard<std::mutex> lk(mtx_);
        // ...
    }
};

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

Почему для параметра обычно лучше написать const std::string&, чем std::string?

Итоги

Используйте const T& для параметров, предназначенных только для чтения, возвращаемых значений функций доступа и циклов по диапазону. Для нетривиальных типов это быстрее передачи по значению и безопаснее неконстантных ссылок.

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

Урок «Ссылки const и когда их использовать» бесплатный?

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

Чему я научусь в уроке «Ссылки const и когда их использовать»?

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

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

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

Сколько времени занимает урок «Ссылки const и когда их использовать»?

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

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

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

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

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