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

كيفية تهيئة مصفوفات الأعضاء باستخدام قوائم التهيئة في C++0x؟

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

How to Initialize Member Arrays with Initializer Lists in C  0x?

تهيئة مصفوفات الأعضاء باستخدام قوائم المُهيئ

في C 0x، قد تواجه الخطأ "أنواع غير متوافقة في المهمة" عند محاولة تهيئة مصفوفة أعضاء باستخدام قائمة المُهيئ .

لحل هذه المشكلة، فكر في استخدام مُنشئ قالب متنوع بدلاً من ذلك:

struct foo {
    int x[2];
    template 
    foo(T... ts) : x{ts...} {}
};

int main() {
    // Usage
    foo f1(1, 2);   // OK
    foo f2{1, 2};   // Also OK
    foo f3(42);    // OK; x[1] zero-initialized
    foo f4(1, 2, 3); // Error: too many initializers
    foo f5(3.14);  // Error: narrowing conversion not allowed
    foo f6("foo"); // Error: no conversion from const char* to int
}

إذا كان الحفاظ على حالة "const" ليس ضروريًا، فيمكنك بدلاً من ذلك استخدام دالة لتحميل قيم المصفوفة:

struct foo {
    int x[2];
    foo(std::initializer_list il) {
        std::copy(il.begin(), il.end(), x);
    }
};

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

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

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

Copyright© 2022 湘ICP备2022001581号-3