"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يسمح Visual Studio 2010 بربط مرجع غير ثابت بقيم R؟

لماذا يسمح Visual Studio 2010 بربط مرجع غير ثابت بقيم R؟

تم النشر بتاريخ 2024-11-04
تصفح:517

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

السماح بربط المراجع غير الثابتة بقيم Rvalue: شذوذ VS2010

يحظر معيار C بشكل صارم ربط المراجع غير الثابتة بقيم r. ومع ذلك، في حالة شاذة غريبة، يقوم Visual Studio 2010 (SP1) بتجميع التعليمات البرمجية التالية دون أي أخطاء أو تحذيرات:

string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}

التناقضات في سلوك المترجم

على النقيض من ذلك، يظهر المترجمون الآخرون سلوكًا أكثر صرامة:

    يصدر مجلس التعاون الخليجي خطأ في الترجمة، مما يؤدي إلى تحديد غير قانوني بشكل صحيح ربط مرجع غير ثابت بقيمة r.
  • يوفر Visual Studio 2008 تحذيرًا للتجميع، مع الاعتراف بالمشكلة المحتملة ولكن يسمح بمواصلة التجميع.
شرح الشذوذ VS2010

ينبع هذا السلوك غير المعتاد في VS2010 من امتداد برنامج التحويل البرمجي المعروف. على عكس دول مجلس التعاون الخليجي وVisual Studio 2008، يسمح VS2010 بربط المراجع غير الثابتة بقيم r في حالات معينة، مثل عندما يتم إنشاء rvalue بواسطة دالة تُرجع كائنًا مؤقتًا.

بينما يتحدى هذا الامتداد المعيار، من المحتمل أنه تم تنفيذه من أجل الراحة. ومع ذلك، يمكن أن يؤدي ذلك إلى سلوك غير محدد إذا تم تعديل قيمة r بعد ربط المرجع.

العواقب والتوصيات

يمكن أن يقدم هذا الامتداد أخطاء دقيقة في التعليمات البرمجية التي تعتمد على الالتزام السليم بمعيار C. لذلك، يوصى بشدة بتجنب ربط المراجع غير الثابتة بقيم r، حتى في VS2010. بدلاً من ذلك، استخدم دائمًا مراجع const عند الارتباط بقيم r، كما هو مقصود بواسطة المعيار.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3