فرق xvalue با rvalue با prvalue - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فرق xvalue با rvalue با prvalue

+2 امتیاز

تفاوت xvalue با rvalue چی هست ؟

مثالی که من دیدم داخل کد زیر

struct A
{
   static int k;
   int i;
};
 
int A::k = 10;
 
A func() { A a; return a; }

نوع func().i  از نوع xvalue هست . حالا من متوجه نشدم فرق xvalue با rvalue دقیقا چیه الان؟ یا یکی هستند ؟ بعد prvalue چی هست ؟

سوال شده آبان 24, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110
ویرایش شده آبان 24, 1393 بوسیله ی Xavi

1 پاسخ

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

rvalue : یعنی مقادیر موقت.یا مقادیری که به شی خاصی اشاره نمی کنن (مثل true , 7 , ... )

متغیر های از نوع rvalue به 2 دسته تقسیم میشن xvalue ,prvalue

 

xvalue یعنی rvalue هایی که اسم ندارند و در حال نابودی هستند ( expiring value ) مثلا اگر مقدار بازگشتی تابعی rvalue&& باشه اون مقدار xvlue حساب میشه.مثل کدی که داخل سوالتون گداشتید چون در  func().i  به محض تمام شدن عبارت مقدار بازگشتی از Func پاک میشه و اسمی هم نداره و از نوع rvalue&& هم هست پس func().i  از نوع xvalue به حساب میاد.

 

prvalue به rvalue ای گفته میشه که xvalue نباشه نمونش ثابت های عددی هستش یا مثلا توابعی که مقدار بدون refrence بر می گردونن یا true , false .

مثال :

int&& foo(int&& a){...}
 foo(6)
 //addad 6 az no e prvalue hast
 //meghdari ke az foo bar migarde xvalue hast
 //voroodi foo yani khode a az no e lvalue hast ke ba rvalue meghdar dehi mishe

 int& foo2();
 // meghdar bazgashti az foo2 lvalue hast 

int foo3();
 //meghdar bazgashti az foo3 prvalue hast

 

lvalue قابل تبدیل به rvalue نیست . ولی rvalue میتونه به lvalue هم تبدیل بشه .

int&& a = 5;//ok tabdil prvalue be rvalue refrence

int val = 7; //ok tabdil prvalue be lvalue

int& val2=7;//error tabdil  prvalue be lvalue refrence(chon hafeze rvalue ghabel dastresi nist)

int b = a;//ok tabdil  lvalue be lvalue 

int c = std::move(a);//ok  tabdil rvalue refrence be lvalue

int&& d= a ;//error tabdil lvalue be rvalue refrence

int&& d= std::move(a) ;//ok tabdil rvalue refrence be rvalue refrence


 

پاسخ داده شده آبان 24, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد دی 3, 1393 بوسیله ی Xavi
...