➕ مرجع C++ بالعربي
كل كلمة مفتاحية وحاوية ودالة قياسية في C++ بالعربي: ماذا تفعل، صياغتها، مثال يوضّحها، وأشهر الأخطاء — لغة مُترجَمة فلا يوجد تشغيل حي في المتصفح. حاليًا 39 عنصر — والقائمة تكبر.
أساسيات اللغة
auto
الاستنتاج التلقائي للنوع
auto تجعل المترجم يستنتج نوع المتغيّر من قيمته الابتدائية بدل ما تكتبه أنت يدويًا.
const
الثوابت وحماية القيم
const تمنع تعديل قيمة متغيّر أو معامل أو دالة عضو بعد تعريفها — أداة أساسية لكود آمن وواضح النية.
constexpr
الحساب وقت الترجمة
constexpr تفرض حساب القيمة أو الدالة وقت الترجمة كلما أمكن ذلك، فيصبح الناتج جاهزًا قبل حتى تشغيل البرنامج.
static
التخزين الساكن والأعضاء المشتركة
static لها ثلاثة معانٍ حسب السياق: متغيّر محلي يحتفظ بقيمته بين الاستدعاءات، عضو صنف مشترك بين كل الكائنات، أو رمز مخفي عن ملفات أخرى.
namespace
فضاءات الأسماء
namespace تجمع مجموعة أسماء (دوال، أصناف، متغيرات) تحت مظلة واحدة لتفادي تعارض الأسماء بين مكتبات مختلفة.
using
الأسماء المستعارة للأنواع
using تنشئ اسمًا مستعارًا لنوع موجود (بديل حديث عن typedef) أو تسحب اسمًا محددًا من namespace آخر.
البرمجة الكائنية
class
الأصناف
class تعرّف نوعًا جديدًا يجمع بيانات (أعضاء) ودوالًا تعمل عليها (دوال أعضاء) — حجر الأساس بالبرمجة كائنية التوجّه.
struct
الهياكل
struct مطابقة لـ class تمامًا في C++ إلا أن أعضاءها public افتراضيًا — تُستخدم عرفًا للبيانات البسيطة بلا سلوك معقّد.
this
المؤشّر this
this مؤشّر ضمني متاح داخل كل دالة عضو غير static، يشير إلى الكائن الحالي الذي استُدعيت الدالة عليه.
virtual
الدوال الافتراضية
virtual تجعل استدعاء الدالة يُحدَّد وقت التشغيل حسب النوع الفعلي للكائن، لا حسب نوع المؤشّر أو المرجع المُعلَن — أساس تعدّد الأشكال.
override
تصريح إعادة التعريف
override كلمة اختيارية لكن مهمة توضع بعد دالة بصنف مشتق لتؤكد أنها فعلًا تُعيد تعريف دالة virtual من الصنف الأساس.
friend
الدوال والأصناف الصديقة
friend تمنح دالة أو صنفًا خارجيًا حق الوصول للأعضاء الخاصة (private) لصنف معيّن، كاستثناء مضبوط لقاعدة التغليف.
enum class
التعدادات المحكومة
enum class تعريف حديث للتعدادات (C++11) يمنع تسريب أسمائها للنطاق المحيط ويمنع تحويلها الضمني لعدد صحيح — أأمن من enum التقليدية.
الذاكرة والموارد
new / delete
التخصيص الديناميكي اليدوي
new يحجز ذاكرة على الكومة (heap) ويُرجع مؤشّرًا لها، وdelete يحرّرها يدويًا — الأداة الأصلية لإدارة الذاكرة بـ C++ قبل الإشارات الذكية.
RAII
مبدأ حجز الموارد كتهيئة
RAII (Resource Acquisition Is Initialization) مبدأ تصميم أساسي بـ C++: اربط عمر أي مورد (ذاكرة، ملف، قفل) بعمر كائن، فيتحرر تلقائيًا وقت خروج النطاق حتى لو حدث استثناء.
std::move
دلالات النقل
std::move لا تنقل شيئًا فعليًا — تحوّل تعبيرًا إلى rvalue reference، ما يخبر المترجم أنه يمكن «سرقة» موارده الداخلية بدل نسخها.
std::unique_ptr
المؤشّر الذكي الحصري
std::unique_ptr مؤشّر ذكي يملك كائنًا على الكومة حصريًا ويحرّره تلقائيًا بالهادم — تطبيق مباشر لمبدأ RAII، ولا يمكن نسخه.
std::shared_ptr
المؤشّر الذكي المشترك
std::shared_ptr مؤشّر ذكي يسمح لعدة مالكين بمشاركة نفس الكائن، عبر عدّاد مراجع يحرّر الذاكرة تلقائيًا عند وصوله للصفر.
std::weak_ptr
المؤشّر الضعيف
std::weak_ptr يراقب كائنًا يملكه shared_ptr دون زيادة عدّاد المراجع — يكسر دورات المراجع التي تسبب تسريب ذاكرة.
& vs *
المراجع مقابل المؤشّرات
المرجع (Type&) اسم مستعار لمتغيّر موجود لا يمكن أن يكون فارغًا ولا يُعاد ربطه، بينما المؤشّر (Type*) عنوان ذاكرة يمكن أن يكون nullptr ويُعاد توجيهه.
القوالب والدوال المتقدّمة
template
القوالب البرمجية
template يتيح كتابة دالة أو صنف عامّ يعمل مع أي نوع بيانات، فيولّد المترجم نسخة مخصّصة لكل نوع تُستخدم فعليًا وقت الترجمة.
[](){}
تعبيرات لامدا
تعبير لامدا يعرّف دالة مجهولة الاسم مباشرة في مكان استخدامها — أداة أساسية مع خوارزميات STL وwrite-once callbacks قصيرة.
operator
تحميل العوامل زائدًا
تحميل العوامل زائدًا يعيد تعريف سلوك عوامل مثل + و== و<< لتعمل بشكل طبيعي مع أنواعك المخصّصة، تمامًا كما تعمل مع الأنواع الأساسية.
noexcept
ضمان عدم رمي الاستثناءات
noexcept تصريح يؤكد أن دالة معيّنة لن ترمي أي استثناء إطلاقًا — إن خالفت الوعد، يستدعي البرنامج std::terminate فورًا بدل معالجة الاستثناء عاديًا.
حاويات STL
std::vector
المصفوفة الديناميكية
std::vector مصفوفة ديناميكية تكبر تلقائيًا حسب الحاجة، وتُعد الحاوية الافتراضية والأكثر استخدامًا بـ C++ الحديثة.
std::string
النصوص القياسية
std::string نوع نصوص كامل يدير ذاكرته تلقائيًا، بعكس مصفوفات char الخام الموروثة من C التي تحتاج إدارة يدوية.
std::pair
الزوج المرتّب
std::pair يجمع قيمتين من نوعين مختلفين (أو متطابقين) بكائن واحد بسيط — أداة صغيرة لكن شائعة جدًا مع الخوارزميات والحاويات.
std::map
الخريطة المرتّبة
std::map حاوية مفتاح-قيمة تحافظ على ترتيب مفاتيحها تلقائيًا، مبنية داخليًا على شجرة متوازنة، بعمليات بحث وإدراج بسرعة O(log n).
std::unordered_map
الخريطة غير المرتّبة
std::unordered_map حاوية مفتاح-قيمة مبنية على جدول تجزئة (hash table)، بمتوسط سرعة O(1) للبحث والإدراج لكن بلا أي ترتيب مضمون للعناصر.
std::set
المجموعة الفريدة
std::set حاوية تخزّن عناصر فريدة فقط (بلا تكرار) وتحافظ على ترتيبها تلقائيًا — مثالية لفلترة التكرارات أو فحص الانتماء بسرعة.
std::array
المصفوفة الثابتة الحجم
std::array غلاف حديث وآمن حول مصفوفة C التقليدية ثابتة الحجم، بحجم يُحدَّد وقت الترجمة ولا يتغيّر أبدًا بعدها.
std::stack
المكدّس (LIFO)
std::stack حاوية مكيّفة (container adapter) تطبّق مبدأ LIFO — آخر عنصر يدخل هو أول عنصر يخرج، بواجهة push/pop/top فقط.
std::queue
الطابور (FIFO)
std::queue حاوية مكيّفة تطبّق مبدأ FIFO — أول عنصر يدخل هو أول عنصر يخرج، بواجهة push/pop/front/back فقط.
خوارزميات STL
iterator
المكرِّرات
iterator كائن يشبه المؤشّر يشير لعنصر داخل حاوية STL ويمكن تحريكه للتنقل بينها — الجسر الموحّد بين كل الحاويات وكل الخوارزميات.
std::sort
الترتيب
std::sort ترتّب عناصر أي نطاق (حاوية توفّر وصولًا عشوائيًا مثل vector أو array) تصاعديًا افتراضيًا، بمتوسط أداء ممتاز O(n log n).
std::find
البحث الخطّي
std::find تبحث عن أول عنصر يطابق قيمة معيّنة ضمن نطاق، بفحص خطّي (O(n)) يعمل مع أي نوع حاوية تقريبًا — حتى غير المرتّبة.
std::for_each
التطبيق على كل عنصر
std::for_each تطبّق دالة أو لامدا معيّنة على كل عنصر ضمن نطاق، معبّرة عن النية بوضوح أكثر من كتابة حلقة for يدوية.
std::transform
التحويل بين النطاقات
std::transform تطبّق دالة على كل عنصر بنطاق مصدر وتضع النتيجة بنطاق وجهة — يبني نطاقًا جديدًا من نطاق موجود بدل تعديله مباشرة.
std::accumulate
التجميع والاختزال
std::accumulate تختزل نطاقًا كاملًا لقيمة واحدة عبر دمج تراكمي — الاستخدام الافتراضي جمع كل العناصر، لكنها تقبل أي عملية دمج مخصّصة.
🎓 تريد التعلم بالترتيب بدل المرجع السريع؟ ابدأ من مسار CPP الكامل بالعربي.