ما هو إشارة R-القيمة التي هي على وشك أن يأتي في ج المقبلة معيار ++؟
-
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
دون أن تفعل نسخة مكلفة من كافة البيانات في الناقل.