ميزة باستخدام قائمة التهيئة الإجمالية على منشئ؟

StackOverflow https://stackoverflow.com/questions/902077

  •  05-09-2019
  •  | 
  •  

سؤال

أنا جديد على C ++ ولدي سؤال ...

حاولت الإجابة على السؤال بنفسي عن طريق إجراء تطبيق اختبار ... في التصحيح، يولد تهيئة الفئة B رمز التجميع أقل، ولكن في وضع الإصدار، لا أستطيع أن أقول حقا ... إنه يحسن تهيئة بعيدا :(

دعنا نقول أن لدي فئتين:

class A
{
public:
    int a, b, c, d;

    A(int _a, int _b, int _c, int _d) : a(_a), b(_b), c(_c), d(_d)
    {
    }
};

class B
{
public:
    int a, b, c, d;
};

هل هناك أي ميزة من استخدام

B b = {1, 2, 3, 4}

بدلا من

A a = A(1, 2, 3, 4);

?

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

المحلول

لا أعرف عن مزايا الأداء، ولكن بشكل عام باستخدام المنشئ هو المفضل.

هذا لأنه مع A، يمكن للأعضاء A، B، C، D يمكن أن تصنع خاصة. وبالتالي، فإنك تحصل على تغليف مع نهجك، والذي لم يكن لديك في B.

كمصمم فئة، يمكنك تطبيق الاستخدام الصارم وتخصيص متغيرات الأعضاء عبر منشئ. في الخاص بك ب، سيناريو الطبقة، لا يمكنك ذلك.

لذلك بينما قد تحصل على دفعة صغيرة في Perf، لاستخدام B، أود أن أتعرض لها أن تكون ضئيلة، وسوف يتم إلزاجها من قبل الصداع المحتمل من وجود أعضاء من الفئة غير المحمية.

نصائح أخرى

للحصول على كائنات عالمية وأعضاء فئة ثابتة، لا تستدعي قائمة التهيئة أي رمز في وقت التشغيل. (يتم تخزين بيانات التهيئة مباشرة في الثنائي).

إذا كنت تهيئة الكثير من الكائنات، أو إذا كان رمز المنشئ باهظ الثمن / كبير، فقد يؤدي ذلك إلى اختلاف ملحوظ في وقت الحمل.

كما قيل، هذا صحيح فقط للبيانات القديمة العادية، أي كل ما يمكن تهيئةه مع قائمة تهيئة في C ++ <0x

ليس لديك لكتابة كود المنشئ و C باستخدام هذا النوع من التهيئة يعمل في C ++.

إذا كان لديك هياكل مركبة معقدة لتقديم البيانات البسيطة، فقد تكون تهيئة المتغيرات أسهل مع قوائم التهيئة أكثر من المعالجين:

B barr[5] = {
    {1,2,3,4},
    {5,6,7,8},
    ...
  };

العيب الذي يعمل عليه (حاليا) يعمل فقط من أجل الطبقات البسيطة مع متغيرات عضو جراب فقط وأن المبرمجين قد لا يكونون على دراية بالبناء.

لا يمكن لمعظم الفصول استخدام قوائم التهيئة (حتى الآن!)، لذلك أنت أفضل حالا باستخدام منشئ فقط لتكون متسقة. في C ++ 0x STD :: Initializer_List موجودة للسماح بجميع بناء الجملة لأي فئة.

فيما يلي السيناريوهات عند استخدام قائمة التهيئة:

  1. لتهيئة أعضاء بيانات غير ثابتة.
  2. لتهيئة أعضاء المرجعية.
  3. لتنفيذ الكائنات الأعضاء التي لا تملك منشئ افتراضي.
  4. لتهيئة أعضاء الطبقة الأساسية.
  5. عندما يكون اسم المعلمة المنشئ نفس عضو البيانات.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top