C99 говорит в сноске (из раздела $ 6.3.2.1),
Имя '' lvalue '' происходит от выражения присваивания E1 = E2, в котором требуется левый операнд E1быть (изменяемым) значением.Возможно, это лучше рассматривать как представление объекта «значение локатора». То, что иногда называют «rvalue», в этом международном стандарте описывается как «значение выражения» .
Надеюсь, что это объясняет, почему ++i
в C возвращает значение r.
Что касается C ++, я бы сказал, что это зависит от объекта, который увеличивается.Если тип объекта - некоторый определенный пользователем тип, то он всегда может возвращать lvalue.Это означает, что вы всегда можете написать i++++++++
или ++++++i
, если тип i
равен Index
как определено здесь:
Неопределенное поведение и точки последовательности перезагружены