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

لماذا يتطلب `std::array` أقواسًا مزدوجة متعرجة في قوائم التهيئة؟

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

Why Does `std::array` Require Double Curly Braces in Initializer Lists?

سلوك قائمة المُهيئ: الاختلافات في std::vector وstd::array

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

خذ بعين الاعتبار مقتطف التعليمات البرمجية التالي الذي يقوم بتهيئة std::vector وstd:: المصفوفة:

std::vector x{1,2,3,4};
std::array y{{1,2,3,4}};

std::تهيئة المتجهات

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

في التهيئة المجمعة "بالنمط القديم"، يتم استخدام علامة المساواة والنقطتين:std::array y = { { 1, 2, 3, 4 } };

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

عيب CWG
std::array y = { { 1, 2, 3, 4 } };
يهدف تقرير عيب CWG (عيب CWG # 1270) إلى حل هذا القيد من خلال السماح بإزالة الأقواس لـ أشكال أخرى من تهيئة القائمة. إذا تم اعتمادها، فإن الكود التالي سيكون جيدًا:

std::array y{ 1, 2, 3, 4 };

في الختام، الفرق في ينبع السلوك بين std::vector وstd::array مع قوائم المُهيئ من خصائصها الأساسية كفئة ذات مُنشئات محددة من قبل المستخدم ومجموع يعتمد على التهيئة المجمعة، على التوالي. الأقواس المزدوجة مطلوبة من أجل std::array لتتوافق مع قواعد التهيئة المجمعة، بينما يسمح std::vector بالتهيئة المباشرة باستخدام مجموعة واحدة من الأقواس دون الاعتماد على بناء جملة التهيئة التجميعية ذات النمط القديم.

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

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

Copyright© 2022 湘ICP备2022001581号-3