لماذا تم تسمية std::move باسم std::move؟
وظيفة std::move، على الرغم من اسمها، لا تفعل ذلك في الواقع تحريك أي شيء على الإطلاق. فهو يقوم فقط بتحويل القيمة l (تعبير يشير إلى كائن) إلى قيمة r (تعبير يمثل كائنًا مؤقتًا). يتم إجراء هذا التحويل من خلال تحويل إلى فئة xvalue، والتي تختلف عن lvalues وprvalues.
يعود سبب اختيار التسمية هذا إلى تاريخ المفهوم. في الأصل، تم تقديم عملية النقل كوسيلة لمبادلة القيم بكفاءة دون نسخها. تضمن بناء الجملة المبكر لهذا تحويل القيم إلى قيم r باستخدام static_cast. لتحسين إمكانية القراءة ونقل القصد من هذه القوالب، تم تقديم الكلمة الأساسية "نقل" كسكر نحوي لـ static_cast.
في سياق ذلك الوقت، كان استخدام مصطلح "نقل" يعني الإشارة إلى الغرض من هذه القوالب. : لتمكين دلالات التحرك. والنتيجة هي أن الكود لا ينقل الإجراء الفني الدقيق (التحويل إلى قيمة r)، بل النتيجة المرجوة (تحريك الكائن).
على مر السنين، تطور مفهوم القيم l والقيم r إلى فئات القيمة التي لدينا اليوم، حيث تمثل قيم x الكائنات التي تم تحويلها إلى قيم r. ونتيجة لذلك، يمكن اعتبار الكلمة الأساسية "نقل" مضللة، لأنها تعني فقط إجراء قد يحدث أو لا يحدث تحت الغطاء.
ومع ذلك، تم الحفاظ على اختيار استخدام الكلمة الأساسية "نقل" للحفاظ على سهولة القراءة وتجنب الارتباك الذي قد ينشأ من بناء جملة غير مألوف مثل cast_to_xvalue. تظل الدالة std::move أداة مساعدة قيمة تسمح للمبرمجين بالتعبير عن دلالات النقل بإيجاز، حتى لو كان اسمها قد لا يجسد التفاصيل الفنية لعملها بشكل مثالي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3