Есть несколько интересных вопросов, поднятых здесь относительно поведения undefined в C. Один из них (слегка изменен)
Является ли следующий фрагмент кода результатом undefined?
int i = 0, *a = &i; // Line 1 a[i] = i + 1; // Line 2
Так как нет конкретного ответа на эту часть вопроса, и я заинтересован в том, чтобы знать поведение в С++, я поднимаю его снова здесь.
Правило № 2 из Undefined Поведение и точки последовательности говорит
Кроме того, к предыдущему значению следует обращаться только для определения значения, которое нужно сохранить
Очевидно, что в приведенном выше примере дважды обращается к значению: a[i]
(lhs) и i
(rhs), и только один из них (rhs) определяет значение, которое нужно сохранить.
Ли строка 2 нарушает правило выше и приводит к поведению undefined в С++ 03?
Существует некоторая путаница в отношении того, изменяется ли i
в строке 2?