Avatar ·

ماذا يعني T&& (علامة العطف المزدوجة) في C++11؟

مرحبًا! بدأت تعلم C++11 ووجدت الترميز الجديد `T&&` في الكود. أفهم أن `&` هي reference، و `&&` هي AND منطقية. لكن في سياق الأنواع، هذا شيء آخر. على سبيل المثال، رأيت هذا الكود: ```cpp template void foo(T&& arg) { // نفعل شيئًا } ``` وأيضًا: ```cpp void bar(std::vector&& vec) { // ... } ``` في البداية، ظننت أن `T&&` هي "reference إلى reference"، وهو أمر غير منطقي. ثم قرأت أن هذا يُسمى "rvalue reference". لكنني لا أفهم لماذا نحتاجها. ما الفرق بين `T&` و `T&&`؟ متى يجب استخدام `T&&` بدلاً من `T&` أو `const T&`؟ وما هو "perfect forwarding" الذي يتحدث عنه الجميع؟ اشرح لي، من فضلك، بأمثلة بسيطة. أشعر أنني أفقد شيئًا مهمًا في C++ الحديث. <<>>

إجابة مختصرة: Rvalue references ودلالات النقل

T&& في C++11 هي rvalue reference (reference إلى كائن مؤقت). تسمح بـ