"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفشل مجلس التعاون الخليجي في تهيئة std::array مع قوائم التهيئة؟

لماذا يفشل مجلس التعاون الخليجي في تهيئة std::array مع قوائم التهيئة؟

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

Why Does GCC Fail to Initialize std::array with Initialization Lists?

قوائم التهيئة وstd::array: خطأ في مجلس التعاون الخليجي

توفر فئة std::array في مكتبة C القياسية ثابتًا - حاوية صفيف الحجم. من الشائع أن هذه الفئة تدعم قوائم التهيئة.

ومع ذلك، باستخدام مجلس التعاون الخليجي 4.6.1، تحاول تهيئة مثيلات std::array باستخدام بناء الجملة التالي تفشل:

std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });

على الرغم من أن قوائم التهيئة تعمل مع std::vector، فقد ظهر هذا السلوك مع std::array أسئلة حول معيار C أو مشكلة محتملة في دول مجلس التعاون الخليجي.

std::array's Inner العمل

std::array هو في الأساس بنية تحتوي على صفيف. يشبه هيكلها:

template
struct std::array {
  T a[size];
};
على عكس std::vector، الذي يحتوي على مُنشئ يقبل قوائم المُهيئ، std::array يفتقر إلى مثل هذا المُنشئ.

التهيئة الإجمالية

على الرغم من أن std::array لا يحتوي على مُنشئ صريح لقوائم التهيئة، إلا أنه يعتبر نوعًا مجمعًا في C 11. على هذا النحو، فإنه يمكن تهيئة المجمعة. ومع ذلك، لتهيئة المصفوفة داخل البنية، يلزم وجود مجموعة إضافية من الأقواس المتعرجة:

std::array<:string> strings = {{ "a", "b" }};

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

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

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

Copyright© 2022 湘ICP备2022001581号-3