Я обманывал каким-то кодом и видел что-то, что я не понимаю "почему".
int i = 6;
int j;
int *ptr = &i;
int *ptr1 = &j
j = i++;
//now j == 6 and i == 7. Straightforward.
Что, если вы поместите оператор в левую сторону знака равенства?
++ptr = ptr1;
эквивалентно
(ptr = ptr + 1) = ptr1;
тогда
ptr++ = ptr1;
эквивалентно
ptr = ptr + 1 = ptr1;
Postfix запускает ошибку компиляции, и я получаю ее. У вас есть постоянный "ptr + 1" в левой части оператора присваивания. Справедливо.
Префикс компилируется и РАБОТАЕТ на С++. Да, я понимаю, что это беспорядочно, и вы имеете дело с нераспределенной памятью, но она работает и компилируется. В C это не компилируется, возвращая ту же ошибку, что и постфикс "lvalue, требуемый как левый операнд присвоения". Это происходит независимо от того, как это написано, расширилось с помощью двух операторов "=" или синтаксиса "++ ptr".
В чем разница между тем, как C обрабатывает такое назначение и как С++ обрабатывает его?