سؤال

لقد طلبت مؤخرا في مقابلة حول المعلمة منشئ نسخة.
تم تحريره] كصمم ميزة منشئ تنسخ للغة C ++، لماذا ستختار معلمة مرجعية ثابتة عبر مؤشر CONST إلى كائن Const.

كان لدي بعض الأفكار مثل ذلك منذ أن يمكن تعيين مؤشر إلى NULL الذي ربما لا معنى له (دلالة) في منشئ نسخة وحقيقة أن متغير المؤشر هو كائن مستقل (ربما لن يكون جيدا من حيث الكفاءة) في حين أن المرجع هو مجرد اسم مستعار للكائن الفعلي (وبالتالي طريقة أفضل لتمرير الكائن).
أي أفكار أخرى؟

هل كانت مفيدة؟

المحلول

لأن Stroustrup أراد الفصل أن تكون مثل أنواع البدائية. عند تهيئة int عامل:

int x = 5;
int y = x; // Why would you write int y = &x; ?

تمرير مؤشر ثابت للكائن الثابت، غير متسق مع ما تم إحضاره C ++ إلى C. فئات في C ++ هي مجرد أنواع محددة من قبل المستخدم، إذا لم تعمل مثل أنواع البدائية، فماذا هم؟

مثال آخر حيث سيكون البرمجة في C ++ بائسة بدون مراجع هو التحميل الزائد للمشغلين. تخيل أن عليك الكتابة:

myclass myobj1, myobj2, myobj3;
&myobj3 = &myobj1 + &myobj2;

نصائح أخرى

إنها راحة نصنية.

حالات الاستخدام الأكثر شيوعا عندما يتم استدعاء منشئ النسخ هو عند تمرير المعلمة حسب القيمة، أو يتم إرجاع شيء ما حسب القيمة.

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

أعتقد أن السبب المهم في عدم استخدام المؤشرات في نسخ منشئين هو كيفية ارتداد المؤخرين RVALUES. بالنسبة للمؤشرات، سيكون من الممكن حفظ المؤشر مؤقتا واستخدامه لاحقا مع سلوك غير محدد، مع مراجع، من الصعب تخزين المراجع واستخدامها، أسهل في استخدام القيم الفعلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top