تهيئة فئة C++ التي تحتوي على تهيئة متغير الفئة

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

  •  03-07-2019
  •  | 
  •  

سؤال

لقد لاحظت بعض التعليمات البرمجية لأحد الزملاء اليوم والتي قامت بتهيئة متغيرات الفئة في التهيئة.ومع ذلك، فقد كان ذلك بمثابة تحذير، كما يقول بسبب الترتيب الذي هم فيه.سؤالي هو لماذا من الأفضل إجراء تهيئة متغيرة في مكانها الحالي وليس ضمن الأقواس المتعرجة؟

DiagramScene::DiagramScene( int slideNo, QRectF screenRect, MainWindow* parent )
    : QGraphicsScene( screenRect, parent ),
    myParent( parent ), 
    slideUndoImageCurrentIndex(-1),
    nextGroupID(0),
    m_undoInProgress(false),
    m_deleteItemOnNextUndo(0)
    line(0),
    path(0)
{
    /* Setup default brush for background */
    scDetail->bgBrush.setStyle(Qt::SolidPattern);
    scDetail->bgBrush.setColor(Qt::white);
    setBackgroundBrush(scDetail->bgBrush);

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

المحلول

  • إنه أكثر كفاءة (بشكل عام).تتم تهيئة جميع أعضاء الفصل في المُنشئ، سواء قمت بتهيئتهم بشكل صريح أم لا.إذا لم تقم بتحديد مُهيئ، فسيتم تشغيل المُنشئ الافتراضي للعضو.إذا قمت بتعيين قيمة في نص المنشئ، فسيتم استدعاء عامل التعيين مرة أخرى.لا ينطبق هذا على القيم العددية، كما في المثال الخاص بك، نظرًا لأن القيم العددية لا تحتوي على مُنشئات.
  • لا يمكنك تعيين قيمة مرتين عن طريق الخطأ في قائمة التهيئة.
  • يمكن للمترجم التحقق للتأكد من أن الترتيب الذي تكتب به المُهيئات يطابق الترتيب الذي يتم به تعريف الأعضاء في الفصل.يتطلب معيار C++ أن تتم تهيئة الأعضاء بالترتيب الذي تم الإعلان عنه، بغض النظر عن الترتيب الذي تكتب به المُهيئات.إن قيام المترجم بالتحقق من هذا الترتيب يضمن أن المبرمج يعرف الترتيب الذي سيتم تشغيل أدوات التهيئة به (مرة أخرى، هذا أكثر أهمية بالنسبة للأعضاء غير POD مقارنة بالعدديات).
  • أنواع المراجع و const يجب تهيئة الأعضاء في قائمة التهيئة، لأنه لا يمكنك تعيين مرجع أو ملف const عضو.

نصائح أخرى

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

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

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

ومن توصيتي أن:

  • تتعلم أن تحب قوائم التهيئة.
  • يفهم زميلك في العمل قواعد ترتيب تهيئة الأعضاء (ويتجنب التحذيرات).

وبالإضافة إلى ممتاز - CONST يجب تعيين المتغيرات في قائمة initialisation.

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

وكما أن بعض أنواع قد لا يكون (على سبيل المثال المراجع)، شيدت الافتراضي، ويجب أن يتم بناؤها في قائمة التهيئة.

إذا كان لديك المتغيرات CONST، لا يمكن تعيين قيمتها عن طريق التعيين.

والتهيئة هي أيضا قليلا أكثر كفاءة عند تعيين القيم إلى الكائنات (لم تبن الإضافية أو intrinsics) ككائن مؤقت لم يتم إنشاء مثل ذلك سيكون للمهمة.

C ++ التعليمات لايت للحصول على المزيد تفاصيل

ونلقي نظرة على الحكمة التي تم جمعها في HTTP : //web.tiscali.it/fanelia/cpp-faq-en/ctors.html#faq-10.6

وإضافة أخرى لجريج الجواب: يجب تهيئة أفراد التي هي من أنواع مع عدم وجود منشئ افتراضي في قائمة التهيئة

الجواب

وجريج Hegwell وتحتوي بعض النصائح ممتازة، لكنه لا يفسر لماذا المترجم هو توليد تحذيرا.

وعند معالجة قائمة مهيئ للمنشئ من قبل المجمع، وتهيئة العناصر في الترتيب يتم الإعلان عنها في تعريف فئة ، وليس في الترتيب الذي تظهر في قائمة مهيئ.

وبعض المجمعين توليد تحذيرا إذا كان النظام في قائمة مهيئ مختلفة من أجل إعلان (حتى أنك لن يفاجأ عندما لم يتم تهيئة العناصر في ترتيب القائمة). لم تقم بتضمين تعريف فئة، ولكن هذا هو السبب المحتمل للتحذير ترونه.

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

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