Является ли возврат ссылки на уничтожаемый объект - UB?

Это UB?

const int& getValue() {
    return 1;
}


int main() {
    const int& a = getValue();
}

При инициализации константной ссылки литералом создается временный объект, область видимости, которого ограничивается ссылкой на этот объект. Получается что функция возвращает в caller ссылку на объект и сразу же уничтожается, получается переменная a инициализируется мусором?


Ответы (2 шт):

Автор решения: nyekitka

Тут в любом случае возникает -Wreturn-local-addr, так что это не UB. Другой вопрос будет ли запускаться программа с таким предупреждением? Всё зависит от того, как используется статическая память во время выполнения вашей программы. Данные могут затереться, могут нет, но компилятор всё равно будет считать, что участок памяти уже не принадлежит какой-либо переменной. Поэтому, если после того как вы "инициализировали" a, вы выведете её содержимое, в некоторых случаях вы получите 1, а в некоторых пустой вывод.

→ Ссылка
Автор решения: Kurr200

Возврат константной ссылки из функции не продлевает время жизни анонимного объекта.

Источник

→ Ссылка