Хотя краткий ответ "это не lvalue" правильный , возможно, это просто вопрос. Почему не является ли значением ? Или, как мы говорим в C #, переменная .
Причина в том, что вы не можете получить свой пирог и съесть его тоже . Работай логически:
Во-первых, значение оператора ++ в C #, будь то постфикс или префикс, "принимает значение этой переменной, увеличивает значение, назначает новое значение переменной и создает значение как результат ". Значение, полученное в результате, является либо исходным значением, либо увеличенным значением, в зависимости от того, был ли это постфикс или префикс. Но так или иначе, вы производите ценность.
Во-вторых, значение переменной всегда является текущим содержимым этой переменной . (По модулю определенных причудливых сценариев с многопоточностью, которые уведут нас далеко).
Надеюсь, вы согласны с тем, что это совершенно разумные правила.
Теперь должно быть понятно, почему результат i ++ не может быть переменной, но если это не так, позвольте мне прояснить:
Предположим, что i равно 10. Значение i ++ должно быть следующим: «получить значение i - 10 - увеличить его - 11 - сохранить - i теперь 11 - и дать исходное значение в качестве результата - 10». Таким образом, когда вы говорите print (i ++), он должен вывести 10, а 11 должен быть сохранен в i.
Теперь предположим, что смысл i ++ - возвращать переменную , а не значение . Вы говорите print (i ++) и что происходит? Вы получаете значение i - 10 - увеличиваете его - 11 - сохраняете - i теперь 11 - и возвращаете переменную в результате. Каково текущее значение переменной? 11! Что именно то, что вы не хотите печатать.
Короче говоря, если бы i ++ вернул переменную, он бы делал бы в точности противоположное предполагаемого значения оператора! Ваше предложение логически противоречиво, поэтому ни один язык так не делает.