Avatar ·

مزايا التهيئة بالقوائم (الأقواس المعقوفة) في C++11 والإصدارات الأحدث

مرحباً بالجميع! بدأت في تعلم C++11 ووجدت ميزة جديدة — التهيئة باستخدام الأقواس المعقوفة (list initialization). على سبيل المثال: ```cpp std::vector v = {1, 2, 3}; int x{0}; ``` يبدو أن كل شيء يعمل، لكنني لا أفهم لماذا نحتاج هذا عندما يكون لدينا التهيئة القديمة الجيدة بالأقواس المستديرة أو عامل الإسناد. يبدو لي أن هذا مجرد سكر نحوي (syntactic sugar). لكنني سمعت أن الأقواس المعقوفة تحل بعض المشكلات. على سبيل المثال، قرأت أنها تمنع التحويلات الضيقة (narrowing conversions). ولكن ما هذا؟ وما هي المزايا الأخرى؟ لدي مثال محدد يربكني: ```cpp int a = 3.14; // a == 3، يتم فقدان الجزء الكسري فقط int b(3.14); // نفس الشيء int c{3.14}; // خطأ في الترجمة! لماذا؟ ``` أفهم أن هذا خطأ، ولكن لماذا نستدعيه؟ ربما هناك حالات تتصرف فيها الأقواس المعقوفة بشكل غير متوقع؟ على سبيل المثال، مع الفئات التي تحتوي على مُنشئ (constructor) من std::initializer_list. أرجو التوضيح.