Является ли возврат ссылки на уничтожаемый объект - UB?
Это UB?
const int& getValue() {
return 1;
}
int main() {
const int& a = getValue();
}
При инициализации константной ссылки литералом создается временный объект, область видимости, которого ограничивается ссылкой на этот объект. Получается что функция возвращает в caller ссылку на объект и сразу же уничтожается, получается переменная a инициализируется мусором?
Ответы (2 шт):
Тут в любом случае возникает -Wreturn-local-addr, так что это не UB. Другой вопрос будет ли запускаться программа с таким предупреждением? Всё зависит от того, как используется статическая память во время выполнения вашей программы. Данные могут затереться, могут нет, но компилятор всё равно будет считать, что участок памяти уже не принадлежит какой-либо переменной. Поэтому, если после того как вы "инициализировали" a, вы выведете её содержимое, в некоторых случаях вы получите 1, а в некоторых пустой вывод.
Возврат константной ссылки из функции не продлевает время жизни анонимного объекта.