Выбор ответа Senior Правило 0/3/5 обновлено

Член-ссылка и присваивание

Вопрос

В классе есть член const Config& cfg;. Что компилятор сделает с операторами присваивания?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Объявит их удалёнными: ссылку нельзя перепривязать. Неявные копирующее и перемещающее присваивание определяются как удалённые, если у класса есть нестатический член-ссылка или const-член.

Варианты ответа

  1. Сгенерирует присваивание, которое копирует значение Config по ссылке
  2. Сгенерирует присваивание, перепривязывающее ссылку
  3. Объявит их удалёнными: ссылку нельзя перепривязатьправильный ответ
  4. Ошибка компиляции в момент объявления класса

Разбор

Неявные копирующее и перемещающее присваивание определяются как удалённые, если у класса есть нестатический член-ссылка или const-член. Конструкторы копирования при этом работают. Поэтому такие классы плохо живут в контейнерах; вместо ссылки часто хранят указатель или std::reference_wrapper.

  • Присваивание через ссылку изменило бы чужой объект, стандарт так не делает.
  • Перепривязать ссылку нельзя в принципе.
  • Ошибка возникнет только при попытке присвоить.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.