السماح بربط المراجع غير الثابتة بقيم Rvalue: شذوذ VS2010
يحظر معيار C بشكل صارم ربط المراجع غير الثابتة بقيم r. ومع ذلك، في حالة شاذة غريبة، يقوم Visual Studio 2010 (SP1) بتجميع التعليمات البرمجية التالية دون أي أخطاء أو تحذيرات:
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
التناقضات في سلوك المترجم
على النقيض من ذلك، يظهر المترجمون الآخرون سلوكًا أكثر صرامة:
ينبع هذا السلوك غير المعتاد في VS2010 من امتداد برنامج التحويل البرمجي المعروف. على عكس دول مجلس التعاون الخليجي وVisual Studio 2008، يسمح VS2010 بربط المراجع غير الثابتة بقيم r في حالات معينة، مثل عندما يتم إنشاء rvalue بواسطة دالة تُرجع كائنًا مؤقتًا.
بينما يتحدى هذا الامتداد المعيار، من المحتمل أنه تم تنفيذه من أجل الراحة. ومع ذلك، يمكن أن يؤدي ذلك إلى سلوك غير محدد إذا تم تعديل قيمة r بعد ربط المرجع.
العواقب والتوصياتيمكن أن يقدم هذا الامتداد أخطاء دقيقة في التعليمات البرمجية التي تعتمد على الالتزام السليم بمعيار C. لذلك، يوصى بشدة بتجنب ربط المراجع غير الثابتة بقيم r، حتى في VS2010. بدلاً من ذلك، استخدم دائمًا مراجع const عند الارتباط بقيم r، كما هو مقصود بواسطة المعيار.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3