معنی lvalue و rvalue چیه ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

معنی lvalue و rvalue چیه ؟

+5 امتیاز
این 2 تا کلمه توی c++ یعنی چی ؟بعضی جاها برنامه هام این جور ارور هایی میده lvalue required  نمی فهمم منظورش چیه ؟
سوال شده دی 8, 1392  بوسیله ی ali_coder (امتیاز 35)   1 6 9
دوباره تگ گذاری شد فروردین 3, 1393 بوسیله ی BlueBlade

3 پاسخ

+4 امتیاز
 
بهترین پاسخ

lvalue یعنی متغیری که حافظه داشته باشه و حافظش با & قابل دسترس باشه

rvalue متغیریه که حافظش موقته  یا به عبارتی متغیریه که lvalue نیست

مثلا  توی  کد زیر 2 از نوع rvalue هست ولی x از نوع lvalue

int x;
x=2 ;  

جالا اگر برعکس تعریف کنیم یعنی

2=x

این جا کامپایلر همون اروری که گفتی رو میده جون شما می خوای به یک متغیر که حافظه موقت داره مقدار بدی

2 تا نکته :

لزوما سمت راست بودن تساوی معنی rvalue  بودن رو نمیده مثلا کد زیر هر 2 تا مقدار lvalue هستن  :

int a=1;
int b=2;
a=b;//a,b are lvalue

توی c++ حتی در بعضی از موارد lvalue در سمت چپ تساوی هم نمی تونه قرار بگیره مثلا زمانی که از شی از کلاس استفاده می کنین که operator= براش تعریف نشده .

چند تا مثال  :

int x, *pInt; // x, pInt, *pInt are lvalues
std::size_t f(std::string str); // str is lvalue, f's return is rvalue
f("Hello"); // temp string created for call is rvalue
std::vector<int> vi; // vi is lvalue
…
vi[5] = 0; // vi[5] is lvalue

 

پاسخ داده شده دی 9, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده بهمن 16, 1393 بوسیله ی BlueBlade
+1 امتیاز
مقدار سمت راست و چپ علامت مقدار‌دهی یا همان تساوی

lvalue = rvalue();
پاسخ داده شده دی 8, 1392 بوسیله ی حامد مصافى (امتیاز 1,104)   2 3 12
+1 امتیاز

طبق تعریف سایت مایکروسافت rvalue مقداری هست که بعد از زمان به کارگیری از بین می‌ره و دیگه قابل استفاده نیست. اما حافظۀ lvalue پایدار هست. حتی ثابت‌هایی که تعریف می‌شن lvalue هستن. مثلا در

const unsigned a = 4*8;

a یک lvalue هست که حافظه ش باقی و قابل استفاده س. اما ‎4*‎8‏ rvalue هست. همین طور در این کد:

#include <iostream>
using namespace std;

int& f(int& a)
{
    a += 1;
    return a;
}

int main()
{
    int a = 10;
    f(a) = 5;
    cout<< a;
    cin.get();
}

f(a)‎ یک lvalue هست.

 

http://msdn.microsoft.com/en-us/library/f90831hc.aspx

پاسخ داده شده مرداد 20, 1393 بوسیله ی irancplusplus (امتیاز 203)   1 2 14
...