ما هو إشارة R-القيمة التي هي على وشك أن يأتي في ج المقبلة معيار ++؟

StackOverflow https://stackoverflow.com/questions/846812

  •  21-08-2019
  •  | 
  •  

سؤال

ما هو إشارة R-القيمة التي هي على وشك أن يأتي في ج المقبلة ++ القياسية؟

هل كانت مفيدة؟

المحلول 3

وهنا هو عملية طويلة حقا <لأ href = "http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2 .aspx اتصال "يختلط =" نوفولو noreferrer "> المقالة من ستيفان T. Lavavej

نصائح أخرى

ونلقي نظرة على لماذا C ++ 0X rvalue مرجع لا الافتراضي؟ ، وهو ما يفسر الاستخدام العملي بشكل جيد إلى حد ما.

وانها تسمح لك للتمييز بين التعليمات البرمجية التي قد دعاكم تمرير إشارة إلى القيمة ص أو القيمة لتر. على سبيل المثال:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

وباستخدام إشارة ذات قيمة ص، يمكننا أن نسمح لتمرير في كل ما يشير إلى المؤقتة المتقبلة كما هو الحال في المثال الأول أعلاه:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

وهذا هو أكثر إثارة للاهتمام عندما نكون الرغبة في تمرير القيمة المرجعة من الدالة التي بإنشاء كائن إلى وظيفة أخرى والذي يستخدم هذا الكائن.

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

ومنشئ الخطوة يتصرف مثل منشئ نسخة، ولكن يعرف أن تأخذ مرجعية المقاومة الحرارية بدلا من (CONST) إشارة لتر القيمة. يجوز استخدام دلالات المقاومة الحرارية لنقل البيانات من المؤقتة التي تم إنشاؤها في create_vector ودفعهم إلى حجة لconsume_vector دون أن تفعل نسخة مكلفة من كافة البيانات في الناقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top