Rvalue выражение ((int *) p)
создает и временный тип int*
, к которому нельзя применить оператор ++
.
++
требует lvalue в качестве операнда.
As @FredOverflow упоминает, что lvalues
и rvalues
имеют очень мало общего с присваиванием.
Массивы являются lvalue, но им нельзя присваивать, потому что они не модифицируемы.std::string("Prasoon")
является выражением rvalue, однако оно может встречаться слева от оператора присваивания, поскольку нам разрешено вызывать функции-члены (в данном случае operator =
) для временных значений.