لماذا لا يستدعي `return` من الدالة دلالات النقل (move semantics) في C++11؟ مشكلة مع مراجع rvalue
مرحبًا! بدأت أتعلم C++11 ودلالات النقل (move semantics)، وواجهت مشكلة. كتبت دالة بسيطة تنشئ متجهًا (vector) وتعيده:
```cpp
#include
#include
std::vector createVector() {
std::vector v = {1, 2, 3, 4, 5};
return v; // آمل أن يتم النقل (move) هنا
}
int main() {
std::vector result = createVector();
std::cout << "Size: " << result.size() << std::endl;
return 0;
}
```
كنت أتوقع أنه عند `return` سيتم استدعاء مُنشئ النقل (move constructor) لتجنب النسخ. لكن عندما قرأت عن مراجع rvalue ودلالات النقل، يقول الكثيرون أن المترجم هو من يقرر ما يجب فعله. جربت استخدام `std::move` بشكل صريح:
```cpp
return std::move(v);
```
لكن البعض يقول إن هذا قد يزيد الأمور سوءًا...