Когда кто-то спрашивает о разнице между постинкрементом / декрементом и преинкрементом / декрементом, обычно ответ заключается в том, что префиксные версии добавляют единицу к переменной и возвращают новое значение переменной, тогда как постфиксные версии добавляют ее к переменная и вернуть старое значение.
Пока возился, я обнаружил, что все эти строки законны:
int i = 1;
++i;
++++++++++++++i;
(++++++++++++++i)++;
(++++++(++++(++i)))++;
------i;
--++++--++----++i;
i+=++++++++++++++i+i++-i--;
Но ни одна из следующих строк не является законной:
i++++;
++i++;
--i--;
Если я предполагаю, что префиксные версии возвращаются по ссылке, это все имеет смысл (даже последний пример, потому что постфикс имеет более высокий приоритет, чем префикс).
Является ли предположение / реализация того, что префиксные версии возвращают ссылку, а постфиксные версии возвращают правильное значение? Существуют ли какие-либо тонкие различия в поведении, о которых я не знаю, для операторов pre / post inc / decment?