Отлаживаете ли вы отладочную сборку?Вы часто получаете удивительные результаты, подобные этому, если отлаживаете сборку релиза.
Сборка отладки заставит компилятор поместить все переменные в стек и сохранить их для всей области видимости, так что вы получите ожидаемую отладкуПосмотреть.Сборка выпуска может повторно использовать пространство для одной переменной, если она никогда не будет использоваться снова, даже если она все еще находится в области видимости, и может хранить недолговечные переменные в регистрах процессора, а не в стеке.
ВВ сборке выпуска, скорее всего, x
и y
размещены в одной и той же ячейке памяти (или регистре), поскольку время их использования не перекрывается.Нет необходимости хранить x
после первой строки, поэтому компилятору разрешено его отбрасывать.Если бы вы позже использовали x
в функции, тогда ей потребовалось бы свое собственное пространство в стеке, поэтому вы, вероятно, увидите его в отладчике, как и ожидалось.
И чтобы ответить на ваш вопрос: даэто верно и правильно, пока i
действительно находится в диапазоне.