При использовании uninitialized переменная ссылается на память с теми данными, которые уже в ней оказались. Именно для этого существует uninitialized: память не очищается, и начальное значение по умолчанию ей не присваивается.
Здесь cell случайно находится по одному и тому же адресу на каждой итерации. Устройство стека, вероятно, делает это поведение устойчиво наблюдаемым, но полагаться на него было бы ошибкой. Это не одна переменная, сохраняющаяся между итерациями.
Компилятор или генератор кода при желании может поменять размещение данных.
Переведено с английского·Показать оригиналWith uninitialized, the variable refers to memory containing whichever data happens to be there already. That's precisely why uninitialized exists: it neither clears that memory nor assigns an initial default value.
Here, cell coincidentally resides at an identical address on every iteration. The way the stack operates probably makes this behaviour consistently observable, but depending on it would be a mistake. A single variable isn't persisting from one iteration to another.
If it chooses, the compiler / code generator may rearrange where things live.