0
В C, этоВ C, {a [i] = a [++ i]} эквивалентно {a [i] = a [i + 1]; я ++;}?
a[i] = a[++i];
эквивалентно
a[i] = a[i+1]; i++;
То есть, какая сторона задания оценивается первым и какое значение i
используется на левой стороне? Или это назначение неоднозначно?
Неопределенное поведение. Не пишите такой код. – Amadan
@Amadan, на самом деле, это не так. Из http://stackoverflow.com/a/3914332/434551, «C++ 03 [раздел 5/4] говорит, что между предыдущей и следующей точкой последовательности скалярный объект должен иметь неизмененное значение хранимого значения не более одного раза путем оценки выражение ». Здесь« i »изменяется только один раз. –
@RSahu: см. [Этот ответ] (http://stackoverflow.com/a/2989841/240443), цитату из K & R, с этим точным примером. Тот факт, что он не нарушает одно ограничение, не означает, что он не может нарушить другой. – Amadan