ماذا يعني 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 إلى كائن مؤقت). تسمح بـ