صدر C++23: نظرة عامة على التغييرات الرئيسية للمعيار الجديد

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

صدر C++23: نظرة عامة على التغييرات الرئيسية للمعيار الجديد



حدث بارز في عالم لغات البرمجة — اللجنة الدولية لتوحيد معايير C++ (ISO/IEC JTC1/SC22/WG21) اعتمدت رسمياً الإصدار الجديد من اللغة: C++23. هذا الإصدار، الذي حل محل C++20، ليس ثورياً، لكنه يحتوي على العديد من التحسينات المنتظرة والمفيدة التي ستجعل الكود أنظف وأكثر أماناً وأعلى أداءً. دعونا نستعرض أهم الابتكارات.



أهم الجديد في C++23



1. std::print و std::println — بديل حديث لـ cout

ربما يكون التغيير الأكثر وضوحاً في البرمجة اليومية. تمت إضافة الدالتين std::print و std::println إلى المكتبة القياسية، استناداً إلى التنسيق القوي من std::format (C++20). الآن أصبح الإخراج إلى وحدة التحكم ليس فقط أكثر ملاءمة، بل وأسرع بكثير من خلال std::cout.

  • مثال: std::println("مرحباً، {}! الإجابة: {}", name, 42);
  • المزايا: أمان الأنواع، بناء جملة قابل للقراءة، دعم Unicode.


2. deducing this (P0847R7) — الإشارة الصريحة إلى this

أحد أقوى الابتكارات للبرمجة الوصفية وإنشاء المكتبات. الآن يمكن تمرير الكائن this بشكل صريح كمعامل لدالة عضو. هذا يحل المشكلات القديمة مع لامبدا و CRTP (Curiously Recurring Template Pattern).

  • يسمح بكتابة دالة عضو واحدة تعمل مع الكائنات const وغير const.
  • يبسط تنفيذ نمط "التحميل الزائد حسب المؤهلات".


3. عوامل التشغيل متعددة الأبعاد operator[] (P2128R6)

إمكانية طال انتظارها — الآن يمكن لـ operator[] قبول عدة وسائط. هذا أمر بالغ الأهمية للمكتبات التي تعمل مع المصفوفات متعددة الأبعاد (مثل mdspan أو المصفوفات الخاصة).

  • كان: matrix(2, 3) أو matrix[{2,3}]
  • أصبح: matrix[2, 3] — بشكل طبيعي ومختصر.


4. std::expected — معالجة الأخطاء الوظيفية

بديل للاستثناءات ورموز الإرجاع. النوع std::expected<T, E> يحتوي إما على قيمة صحيحة أو خطأ. هذا ذو قيمة خاصة في الأنظمة التي يُحظر فيها الاستثناءات (الأنظمة المدمجة، نوى أنظمة التشغيل).



5. تحسينات الوحدات والمفاهيم

الوحدات (C++20) حصلت على إصلاحات واستقرار. الآن هي مدعومة بشكل أفضل من قبل المترجمات. أصبحت المفاهيم أكثر مرونة، مع إضافة إمكانية استخدام auto في معاملات المفاهيم.



ما الذي يستحق الذكر أيضاً؟

  • std::mdspan — span متعدد الأبعاد للعمل مع المصفوفات.
  • إصلاحات في std::ranges — استقرار وسد الثغرات في API.
  • السمة [[assume]] — تلميحات للمترجم لتحسين الأداء.
  • استدعاءات ثابتة لـ operator() — إمكانية

المكتبات الموصى بها