@sddvxd

Когда удалится const — псевдоним в функции?

Добрый день!

void func(int&); //Увеличить на 1 входящее значение
//...
func(1); //Попытка инициализировать ссылку, которая сразу же станет "битой"


Соглашусь с компилятором - написан действительно бред, но почитав книгу нашел порядок инициализации псевдонима:
  1. Во-первых, если необходимо, применяется преобразование типа (в нашем случае int(1))
  2. затем значение помещается во временную переменную
  3. наконец, адрес этой переменной используется в качестве инициализатора псевдонима (ссылки)


Выходит, сначала выделяется память для int(1), все могли бы жить счастливо, но объект сразу должен удалится (поскольку он временный). И поэтому компилятор заставляет описать псевдоним как константу. Там-же написано, что если сделаем так:

void func(const int&); //Увеличить на 1 входящее значение


То с константой не будет никаких проблем и не будет ничего удаляться. Суть вопроса: если не создается временный объект в данном случае, то как долго будет жить const int& в функции и почему выражение

const double& d = 1;

имеет разрешение на компиляцию
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
Эта фича называется продлением жизни временных объектов при инициализации ими константной ссылки.
Подробно: https://herbsutter.com/2008/01/01/gotw-88-a-candid...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы