Что происходит в стеке, когда константная ссылка привязана к временной?

Стандарт C ++ позволяет связывать константные ссылки с r-значениями, тем самым продлевая время жизни временного до тех пор, пока ссылка не выйдет из области видимости.Тем не менее, я не могу понять, как это на самом деле скомпилировано, позвольте мне объяснить на примере:Насколько я знаю, используя в качестве примера архитектуру x86, сначала происходит вызов функции ---- +: = 1 =: + ---- и в стеке создается строковый объект, которыйозначает, что необходимый объем пространства вычитается из регистра ---- +: = 2 =: + ---- (при условии 64-битной архитектуры);после этого регистр ---- +: = 3 =: + ---- возвращается к своему первоначальному значению, освобождая пространство стека, которое заполняла функция ---- +: = 4 =: + ----и, если я правильно понимаю, вызов ---- +: = 5 =: + ---- будет использовать это пространство стека для создания ---- +: = 6 =: + ---- ,который переписал бы строку.Учитывая все это, как можно продлить время жизни строки после вызова ---- +: = 7 =: + ---- в области сборки?
4 голоса | спросил Samuel Navarro Lou 4 ThuEurope/Moscow2014-12-04T17:51:56+03:00Europe/Moscow12bEurope/MoscowThu, 04 Dec 2014 17:51:56 +0300 2014, 17:51:56

1 ответ


0
Временное возвращаемое значение будет построено в кадре стека ---- +: = 0 =: + ---- , либо путем копирования /перемещения временного значения из ---- +: = 1 =: + ---- или, что более вероятно, с помощью RVO, чтобы исключить копию и создать ее непосредственно в кадре вызывающего.После привязки к ссылке временный будет жить столько же, сколько и ссылка.По сути, временное управление выполняется точно так же, как и именованная переменная с той же областью действия.
ответил Mike Seymour 4 ThuEurope/Moscow2014-12-04T17:56:48+03:00Europe/Moscow12bEurope/MoscowThu, 04 Dec 2014 17:56:48 +0300 2014, 17:56:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132