"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يمكنني تمرير Rvalues ​​حسب مرجع Const في C++؟

لماذا يمكنني تمرير Rvalues ​​حسب مرجع Const في C++؟

تم النشر بتاريخ 2024-12-21
تصفح:430

 Why Can I Pass Rvalues by Const Reference in C  ?

الحفاظ على قيم R باستخدام مراجع Const: لغز A C

في لغة C، يُسمح بتمرير قيم R (كائنات مؤقتة) بواسطة مرجع ثابت، على عكس المراجع العادية . خذ بعين الاعتبار البرنامج التالي:

void display(const int& a) { cout 

يسمح البرنامج بتمرير كل من القيم l وقيم r إلى وظيفة العرض، على الرغم من وضع علامة على المرجع على أنه const. هذا السلوك محير، حيث أن المراجع الثابتة ترتبط عادةً بالحفاظ على القيم.

ملحق مدى الحياة لمرجع Const

يكمن مفتاح فهم هذا السلوك في الدلالات. من المراجع الثابتة في C . يعمل المرجع الثابت على إطالة عمر الكائن المشار إليه حتى نهاية النطاق المحتوي. في حالة قيمة r، يمنع هذا بشكل فعال تدمير الكائن المؤقت حتى يخرج المرجع الثابت عن النطاق.

مثال: إطالة عمر قيمة R

في موقعنا على سبيل المثال، يحدث ما يلي عند استدعاء العرض (5):

  • يتم إنشاء قيمة r من النوع int بالقيمة 5.
  • A يرتبط المرجع const a بهذه القيمة r.
  • يعمل المرجع const على إطالة عمر القيمة r حتى نهاية وظيفة العرض.
  • يتم استخدام rvalue داخل الوظيفة لطباعة القيمة 5 .
  • عندما تعود وظيفة العرض، يخرج مرجع const عن النطاق، ويتم إتلاف قيمة r في النهاية.

يوضح هذا كيفية استخدام مرجع const يمكن أن يستمر في الإشارة إلى قيمة r، مما يسمح لها بالبقاء في الوجود على الرغم من أنه سيتم تدميرها على الفور.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3