Неправильный ответ:
Поскольку value++
- это временная переменная, которая содержит старое значение value
. Вы не можете ++
это.
Вы также не можете написать 15++
! Это похоже. Первая - временная переменная, вторая - постоянная, которую вы не можете увеличивать.
Исправление: Поскольку этот ответ принят, я не собираюсь менять исходное сообщение, но, поскольку люди его прочтут, я опубликую исправление здесь.
Прежде всего, я не говорю, что константы и временные объекты - это одно и то же понятие. Я просто пытался сказать, что временные объекты не являются l-значениями, как константы, без фактического использования слова l-значение.
О value++++
, это не ошибка. Я только что проверил это с моим g ++ 4.5, и он отлично работает. В других ответах вы можете прочитать:
Из раздела 3.10.10 стандарта 2003 года:
lvalue для объекта необходимо для того, чтобы модифицировать объект, за исключением того, что rvalue типа class также может использоваться для изменения его референта при определенных обстоятельствах. [Пример: функция-член, вызываемая для объекта (9.3), может модифицировать объект. ]
Что по сути неправильно в том, что вы делаете, так это:
Допустим, value
содержит 10
. Первый value++
изменяет value
на 11
, но возвращает временный объект, содержащий 10
. Затем вы ++
изменяют временное значение (к которому вы никогда не обращаетесь) на 11
, но снова возвращаете временный объект, содержащий 10
. Так что value++++
ведет себя точно так же, как value++
, за исключением того, что выполняет ненужную работу.