"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يؤدي تمرير كائن Const إلى وظيفة عضو غير Const إلى حدوث خطأ في استبعاد المؤهل في C++؟

لماذا يؤدي تمرير كائن Const إلى وظيفة عضو غير Const إلى حدوث خطأ في استبعاد المؤهل في C++؟

تم النشر بتاريخ 2025-01-14
تصفح:629

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

تمرير كائنات Const كوسائط 'this': خطأ في استبعاد المؤهل

في لغة C، تمرير كائنات const كوسائط 'this' إلى وظائف الأعضاء يمكن أن يؤدي إلى أخطاء "تمرير 'const xxx' لأن الوسيطة 'this' لوظيفة العضو تتجاهل المؤهلات". يحدث هذا لأن المترجم يأخذ في الاعتبار احتمال قيام وظائف الأعضاء غير الثابتة بتعديل الكائن، وهو أمر محظور بالنسبة للكائنات الثابتة.

تحليل المشكلة

في الكود المقدم ، يتم تخزين الكائنات الموجودة في المجموعة كـ const StudentT. عند الوصول إلى وظائف الأعضاء getId() و getName() داخل الحلقة، يكتشف المترجم هذه المشكلة نظرًا لأن الكائنات ثابتة ولم يتم وضع علامة على وظائف الأعضاء على أنها const.

الحل

لحل الخطأ، يجب إجراء وظائف getId() وgetName() const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

يسمح هذا باستدعاء الوظائف على كائنات const دون انتهاك قواعد const.

ملاحظات إضافية

  • وبالمثل، المشغل يجب تنفيذ الدالة
عامل منطقي مضمنinline bool operator
    يفضل تمرير المراجع (بدلاً من الكائنات) إلى وظائف الأعضاء لتحسين الأداء وصحة التعليمات البرمجية.
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3