Здравствуйте, Igore, Вы писали:
I>1) Разве константная ссылка не продляет время жизни временного объекта
Продлевается только в одном scope:
{
{
const int &r = 42;
// тут r жива
}
// а тут уже нет
}
I>2) В данном примере почему 42 не попадает под .rodata, оптимизатор?
Значение инта компилятор может подставить инлайн в команду.
Все зависит от того, что с ссылкой делается.
Например, если берется адрес &r и используется, то компилятор должен какой-то адрес выдать, на стеке или в константных данных.
В случае с ссылкой-членом данных и конструктором в объекте неявно указатель будет храниться.
S>struct Data {
S> const int & _i;
S> explicit Data(const int & i) : _i{i} {}
S>};
Т.е. sizeof(Data) == sizeof(int*) и ничем особо протухшего указателя не отличается.