char* str = "HELLO";
char c = str[1];
Имейте в виду, что массивы и строки в C начинаются с индексации 0, а не 1, поэтому «H» - str[0]
, «E» - str[1]
, первый «L» - str[2]
и и так далее.
Я думаю [intro.execution] (номер абзаца варьируются), мог использоваться для объяснения поведения MSVC:
экземпляр каждого объекта с продолжительностью автоматического хранения связан с каждой записью в свой блок. Такой объект существует, и сохраняет его последнюю хранимую сумму во время выполнения блока и в то время как блок приостановлен...
стандарт не разрешает устранение чтения через энергозависимый glvalue, но абзац выше мог быть интерпретирован как позволяющий предсказывать значение false
.
BTW, в Стандарте C (N1570 6.2.4/2) говорится, что
объект существует, имеет базовый адрес и сохраняет свою последнюю хранимую сумму в течение его времени жизни. <глоток> 34 глоток>
<час>34) В случае энергозависимого объекта, последнее хранилище не должно быть явным в программе.
неясно, могло ли быть неявное хранилище в объект с продолжительностью автоматического хранения в памяти/объектной модели C.