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

هل يمكن تهيئة أعضاء بيانات الفصل مباشرة في لغة C++؟

تم النشر بتاريخ 2024-11-18
تصفح:190

Can Class Data Members Be Initialized Directly in C  ?

هل يمكن تهيئة أعضاء بيانات الفصل مباشرة؟

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

#include 

class test {
public:
    void fun() {
        int a(3);
        std::cout 

فشل التجميع مع وجود أخطاء:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

لماذا هذا هو الحال؟

يحظر معيار C صراحة بناء الجملة هذا لـ تهيئة عضو بيانات الفصل. أشارت المقترحات المبكرة لتقديم الميزة إلى مشاكل التحليل كسبب.

خذ بعين الاعتبار هذا المثال الغامض:

struct S { كثافة العمليات ط (خ)؛ // عضو البيانات مع المُهيئ أو ... // ... ثابت كثافة العمليات س؛ كثافة العمليات أنا(ذ); // إعلان وظيفة العضو // ... typedef int y; };
struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

يقترح المعيار حلاً:

لإزالة الغموض، يسمح معيار C فقط ببناء الجملة التالي لتهيئة عضو بيانات الفئة:

    =Initializer-clause
  • {Initializer-list
يضمن هذا الحل الوضوح ويتجنب احتمالية سوء الفهم في الحالات التي قد يشبه فيها الإعلان كائنًا ووظيفة. تصريح.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3