اول از تعریف شروع کنیم. خیلی پیچیده نمیکنم و تلاش میکنم مفهوم درک کنید.
یک lvalue یه چیزی رو نشون میده که توی مموری فضای مشخصی رو میگیره.
در مقابل بیاید فرض کنیم rvalue جایی در مموری نمیگیره!(این جمله ساده شده برای فهم راحت تر)
میتونیم حتی اینطوری تصور کنیم که lvalue ها ظرف هستن و rvalue ها محتویات ظرف!
int x = 77;
برای مثال در کد بالا، عدد 77 یک rvalue هست و x یک lvalue.
خب حالا اگر اینجور کاری کنیم چی میشه؟
int y; 66 = y;
اگر اینو اجرا کنیم gcc احتمالا اینجور اروری میده
error: lvalue required as left operand of assignment
داره بهمون میگه که سمت چپ باید یه lvalue بزاری! نمیشه که آخه توی عدد 66 که یه rvalue هست یچیزی بریزم! بنده خدا rvalueاصلا آدرس مموری نداره که بشه توش چیزی ریخت!
کد زیر نگاه کنید
int x = 1; int y = 3; int z = x + y; // ok
دوتا lvalue با هم جمع شدن! اتفاقی که داره میفته اینه که اول lvalue ها به rvalue تبدیل میشن، و بعد با هم جمع میشن. و در متغیر z که lvalue هست ذخیره میشن.