Выбор ответа Middle Указатели и ссылки обновлено
Продление жизни временного объекта
Вопрос
Корректен ли код const std::string& s = std::string("a") + "b"; std::cout << s;?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Да: временный объект, привязанный к const&, живёт вместе со ссылкой. Правило продления жизни: если временный объект напрямую привязан к ссылке на константу (или к rvalue-ссылке), он живёт столько же, сколько ссылка. - Висячая ссылка получилась бы, если бы временный объект прошёл через функцию, возвращающую…
Варианты ответа
- Нет: временный объект умирает в конце полного выражения,
sвисит - Нет: к
const&нельзя привязать временный объект, только к&& - Да: временный объект, привязанный к
const&, живёт вместе со ссылкойправильный ответ - Да, но только при включённой оптимизации, которая убирает временный объект
Разбор
Правило продления жизни: если временный объект напрямую привязан к ссылке на константу (или к rvalue-ссылке), он живёт столько же, сколько ссылка.
- Висячая ссылка получилась бы, если бы временный объект прошёл через функцию, возвращающую ссылку (например,
std::max). - К
const&временные объекты привязывать можно, к неконстантной lvalue-ссылке нельзя. - Оптимизации тут ни при чём: это правило языка.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.