پویا عظیمی
پویا عظیمی
خواندن ۱ دقیقه·۴ سال پیش

Lvalue Vs Rvalue کمی نوشته درباره


اول از تعریف شروع کنیم. خیلی پیچیده نمیکنم و تلاش میکنم مفهوم درک کنید.

یک 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اصلا آدرس مموری نداره که بشه توش چیزی ریخت!

تبدیل lvalue به rvlaue هم امکان پذیره

کد زیر نگاه کنید

int x = 1; int y = 3; int z = x + y; // ok

دوتا lvalue با هم جمع شدن! اتفاقی که داره میفته اینه که اول lvalue ها به rvalue تبدیل میشن، و بعد با هم جمع میشن. و در متغیر z که lvalue هست ذخیره میشن.


پویا هستم. در تلاش پیدا کردن داستان زندگیم.
شاید از این پست‌ها خوشتان بیاید