Значение указателей и ссылок в стеке C++
Возьмем к примеру код:
int x = 5;
int* ref = &x;
int& ref2 = x;
Стек программы:
| Адресс | Значение | Переменная |
|---|---|---|
| 0000002900F5FC44 | 5 | x |
| 0000002900F5FC68 | 0000002900F5FC44 | *ref |
| ? | ? | &ref2 |
Мой вопрос в том, что именно хранится на местах '?'.
Или другой пример:
int smth() {
int x = 5;
return x;
}
int& smth2() {
int x = 5;
return x;
}
Функция smth после своего выполнения положит на верхушку стека значение 5. Что будет на верхушке стека после вызова функции smth2?
Ответы (1 шт):
первый случай - а кто его знает. компилятор может представить ссылку как указатель и сохранить в стеке, тогда там будет скорее всего 0000002900F5FC44. А может оптимизировать и выбросить переменную. На усмотрение компилятора.
Функция smth после своего выполнения положит на верхушку стека значение 5.
неверно. Не после, а во время своего выполнения. А после своего выполнения там может быть все что угодно. Абсолютно.
Что будет на верхушке стека после вызова функции smth2?
А вот тут вообще нет смысла об этом рассуждать. Вы возвращаете ссылку на локальную переменную. А это UB. После выполнения такого кода компилятор имеет право делать все, что ему покажется правильным, например, записать туда 10. Имеет право.