«lvalue» - это значение, которое может быть целью назначения. «Л» означает «левый», как в левой части знака равенства. Значение r - это правое значение, которое создает значение и не может быть присвоено напрямую. Если вы получаете «lvalue required», у вас есть выражение, которое выдает rvalue, когда требуется lvalue.
Например, константа является r-значением, но не l-значением. Итак:
1 = 2; // Not well formed, assigning to an rvalue
int i; (i + 1) = 2; // Not well formed, assigning to an rvalue.
не работает, но:
int i;
i = 2;
ли. Обратите внимание, что вы можете вернуть lvalue из функции; например, вы можете вернуть ссылку на объект, который предоставляет operator = ().
Как отметил Павел Минаев в комментариях, это не формальное определение lvalues и rvalues в языке, а попытка дать описание кому-то, кто запутался в ошибке при использовании rvalue, где требуется lvalue. C ++ - это язык с множеством деталей; если вы хотите получить официальную форму, вам следует обратиться к официальной справке.