Неправильный ответ:
Поскольку value++
временная переменная, которая содержит старое значение value
. Вы не можете ++
.
Вы также не можете написать 15++
! Это похоже. Первая - временная переменная, более поздняя - константа, ни одна из которой вы не можете увеличить.
Исправление: Поскольку этот ответ был принят, я не собираюсь менять оригинальный пост, но так как люди будут читать это, я буду после коррекции здесь.
Во-первых, я не говорю, что константы и временные объекты - это одна и та же концепция. Я просто пытался сказать, что временные объекты не являются значениями l, как константы, но не используют слово l-значение.
О value++++
, это не ошибка. Я просто тестировал его с помощью g ++ 4.5, и он отлично работает. В других ответах вы можете прочитать:
Из раздела 3.10.10 стандарта 2003:
Именующее выражение для объекта необходимо для того, чтобы изменить объект, за исключением, что Rvalue типа класса может также можно использовать для изменения своего референта при определенных обстоятельствах. [Пример: функция-член, вызываемая для объекта (9.3), может изменять объект. ]
Что неотъемлемо неправильно о том, что вы делаете это:
Скажем value
держит 10
. Первый value++
изменяет value
на 11
, но возвращает временный объект, содержащий 10
. Затем вы получите ++
, который изменяет временное значение (которое вы никогда не получаете) до 11
, но снова возвращает временный объект, который содержит 10
. Итак, value++++
ведет себя точно так же, как value++
, за исключением того, что он делает ненужную работу.
С 'Int x',' 'х ++ также возвращает' int';) – delnan
@delnan да я попробовал это тоже. но поскольку я могу вызывать методы возвращаемого значения, я думал, что снова могу использовать ++ как метод. Что делает постфиксный оператор другим, что я могу вызвать метод для возвращаемого значения, но я не могу использовать postfix ++ более одного раза? – Abhinav
Я думаю, что реальный вопрос заключается в том, почему приращение постфикса требует lvalue ... –