Значение r - это просто значение - 17, или 3,14, или что-то в этом порядке.
lvalue - это (немного упрощает) то, что относится к некоторому месту в памяти, которое может / действительно содержит значение.
Наиболее распространенное lvalue - это просто переменная, поэтому в чем-то вроде x=10
, x
- это lvalue, а 10
- это rvalue. Фактически, это происхождение имен: lvalue
было (изначально) всем, что могло появиться в левой части назначения, а Rvalue было чем-то, что могло появляться в правой части назначения.
Преобразование lvalue в rvalue в основном просто означает получение значения, хранящегося в lvalue, из того места, где оно хранится (обычно в памяти). На самом деле нормального преобразования из rvalue в lvalue не существует - если у вас есть что-то вроде 10
, вы не можете преобразовать обратно в область памяти. В этот момент это просто 10, и тот факт, что может существовать некоторая переменная со значением 10 (или более одного), не означает, что вы можете преобразовать 10 обратно в переменную.