В C поведение выражения x+=y+=x+=y
: undefined; буквально любой результат возможен. Проблема заключается в том, что, за небольшим исключением, C не указывает порядок, в котором выражения оцениваются или применяются побочные эффекты; нет гарантии, что x
или y
обновляются в любом конкретном порядке (оператор +=
не вводит точку последовательности). Таким образом, результат будет варьироваться между платформами, сборками и т. Д. Он даже не должен быть таким же от запуска до запуска, хотя на практике это будет.
Да, выражение разбирает в x+=(y+=(x+=y))
, но это не означает, что значение x
обновляется сразу после крайний правый x+=y
оценивается.
Вот один можно последовательность оценок и побочных эффектов, которые могут объяснить вывод:
t0 <- x + y // t0 == 2
t1 <- y + t0 // t1 == 3
y <- t1 // y == 3
x <- t0 // x == 2
x <- x + t1 // x == 5
В отличие от C, Java заставляет конкретный порядок оценки и побочные эффекты (все вычисляются слева направо, сбоку эффекты применяются немедленно), поэтому результат хорошо определен в Java.
Не знаю, как PHP.
В C все правильно, потому что это вызывает * неопределенное поведение *. – MikeCAT
Ошибка анализа в PHP. – AbraCadaver
Offcourse, это будет, поскольку не добавлен знак $. Но у меня это работает со мной с выходом 5 – Atif