سلوك قائمة المُهيئ: الاختلافات في std::vector وstd::array
بينما std::vector وstd::array هي كلتا الحاويتين في لغة C، يختلف سلوكهما مع قوائم المُهيئ. في هذه المقالة، سوف نستكشف تعقيدات التهيئة المجمعة ونفهم سبب الحاجة إلى الأقواس المتعرجة المزدوجة لـ std::array.
خذ بعين الاعتبار مقتطف التعليمات البرمجية التالي الذي يقوم بتهيئة std::vector وstd:: المصفوفة:
std::vectorx{1,2,3,4}; std::array y{{1,2,3,4}};
std::تهيئة المتجهات
std::دعم المتجهات المُنشئات المعرفة من قبل المستخدم، بما في ذلك تلك التي تقبل قائمة std::initializer_list. لذلك، يمكننا تهيئة x مباشرة باستخدام الأقواس دون الحاجة إلى أقواس متعرجة إضافية. عبارة عن مجموعة لا تحتوي على مُنشئات محددة من قبل المستخدم. بدلاً من ذلك، يعتمد على التهيئة المجمعة، وهي ميزة موروثة من لغة C.
في التهيئة المجمعة "بالنمط القديم"، يتم استخدام علامة المساواة والنقطتين:std::array
ومع ذلك، عند استخدام التهيئة المباشرة للقائمة (المقدمة في C 11)، هذا = بناء الجملة لم يعد صالحا. بالإضافة إلى ذلك، فإن حذف الأقواس، والذي يسمح بحذف الأقواس الإضافية، مسموح به فقط في الإعلانات ذات النمط القديم = بناء الجملة. لتهيئة القائمة المباشرة، تكون الأقواس الإضافية إلزامية.
عيب CWG
std::arrayيهدف تقرير عيب CWG (عيب CWG # 1270) إلى حل هذا القيد من خلال السماح بإزالة الأقواس لـ أشكال أخرى من تهيئة القائمة. إذا تم اعتمادها، فإن الكود التالي سيكون جيدًا:std::arrayy = { { 1, 2, 3, 4 } };
في الختام، الفرق في ينبع السلوك بين std::vector وstd::array مع قوائم المُهيئ من خصائصها الأساسية كفئة ذات مُنشئات محددة من قبل المستخدم ومجموع يعتمد على التهيئة المجمعة، على التوالي. الأقواس المزدوجة مطلوبة من أجل std::array لتتوافق مع قواعد التهيئة المجمعة، بينما يسمح std::vector بالتهيئة المباشرة باستخدام مجموعة واحدة من الأقواس دون الاعتماد على بناء جملة التهيئة التجميعية ذات النمط القديم.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3