Avatar ·

لماذا لا يستدعي `return` من الدالة دلالات النقل (move semantics) في C++11؟ مشكلة مع مراجع القيمة اليمنى (rvalue references)

مرحبًا! بدأت في تعلم 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 references) ودلالات النقل (move semantics)، يقول الكثيرون أن المترجم (compiler) يقرر بنفسه ما يجب فعله. جربت استخدام `std::move` بشكل صريح: ```cpp return std::move(v); ``` لكن البعض يقولون إن هذا قد يزيد الأمور سوءًا