Size: a a a

2020 August 23

AF

Aidar Fattakhov in supapro.cxx
Ты не можешь повлиять на что-то выше по стеку
источник

hh

horse horssyyy in supapro.cxx
Там вроде как хак
источник

hh

horse horssyyy in supapro.cxx
Внутри под капотом компилятор создает пересенную
источник

hh

horse horssyyy in supapro.cxx
И ссылка уже идет на неё
источник

hh

horse horssyyy in supapro.cxx
А выглядит все так будто ты ссылаешься на ретурн
источник

AF

Aidar Fattakhov in supapro.cxx
Да но это работает только в случае const T& foo = temp(); без индирекции
источник

AF

Aidar Fattakhov in supapro.cxx
Это  не выглядит как ты ссылаешься на return, потому что временный объект прям в этой строке живет
источник

AF

Aidar Fattakhov in supapro.cxx
В случае функции ключевое - ты перекладываешь из параметра в return гдето ниже по стеку
источник

AF

Aidar Fattakhov in supapro.cxx
Более того функция может быть определена в другом TU вобще
источник

hh

horse horssyyy in supapro.cxx
Еще интересное
источник

hh

horse horssyyy in supapro.cxx
Если в структуре есть ссылка
источник

hh

horse horssyyy in supapro.cxx
S a {1, {2, 3} };
S* p = new S{1, {2, 3} };
источник

hh

horse horssyyy in supapro.cxx
В первом случае все ок
источник

hh

horse horssyyy in supapro.cxx
Во втором случае висячая ссылка
источник

hh

horse horssyyy in supapro.cxx
Видимо потому что лайфайм объекта не определен компилятором
источник

AF

Aidar Fattakhov in supapro.cxx
И там и там висячая
источник

hh

horse horssyyy in supapro.cxx
Нет в первом случае лайфайм временного обьекта продлевается на время жизни объекта a
источник

hh

horse horssyyy in supapro.cxx
temporary pair {2, 3} bound to the reference member // a.mp and its lifetime is extended to match // the lifetime of object
источник

hh

horse horssyyy in supapro.cxx
Я без понятия правда как  компилятор это реализует
источник

hh

horse horssyyy in supapro.cxx
Я вот про это и говорю. Что по идее логически есди мыслить то любые ссылки ни временные объекты должны быть запрещены
источник