0Pricing
C++ Academy · درس

لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات

تعرّف إلى المراجع بوصفها أسماءً مستعارة أثناء الترجمة، ولا يمكن إعادة ربطها أو جعلها null.

لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما المرجع؟

المرجع هو اسم مستعار لمتغير آخر في وقت الترجمة. وليس مؤشرًا ولا نسخة، بل هو الكائن نفسه باسم مختلف.

صياغة المرجع

استخدم & بعد النوع. يجب تهيئة المراجع عند التصريح عنها، ولا يمكن إعادة ربطها.

int x = 10;
int& ref = x;     // ref is an alias for x
ref = 20;         // x is now 20

مقارنة بالمؤشرات

يوفر كل من المراجع والمؤشرات وصولًا غير مباشر، لكن:

  • يجب تهيئة المراجع، بينما يمكن أن تكون المؤشرات فارغة
  • لا يمكن إعادة تعيين المراجع لتشير إلى كائن آخر
  • لا تستخدم المراجع * أو -> مطلقًا، بل تبدو كالمتغيرات العادية

لا يمكن إعادة ربط المرجع

بعد ربط المرجع، يظل يشير دائمًا إلى الكائن نفسه. ويؤدي الإسناد إليه إلى تعديل القيمة الأساسية، لا المرجع نفسه.

int a = 1, b = 2;
int& r = a;
r = b;       // a becomes 2, r still refers to a

للمراجع العنوان نفسه

يتصرف المرجع كما لو كان المتغير الأصلي. ويؤدي أخذ عنوانه إلى الحصول على عنوان الكائن الذي يشير إليه.

int x = 42;
int& r = x;
std::cout << (&r == &x);   // 1 (true)

مراجع const

مرجع const هو اسم مستعار للقراءة فقط. ويفيد في تمرير الكائنات الكبيرة دون نسخها.

void print(const std::string& s) {
    std::cout << s;  // can read, not modify
}

ربط مراجع const بالكائنات المؤقتة

يمدّد مرجع const عمر الكائن المؤقت إلى عمر المرجع نفسه، وهذا مفيد في التعبيرات.

const std::string& greeting = std::string("Hi");
std::cout << greeting;  // valid

المراجع كأنواع إرجاع

يمكن للدوال إرجاع مراجع، وهذا مفيد للسماح بتسلسل الاستدعاءات أو لإتاحة وصول مباشر إلى عضو. احذر من إرجاع مرجع إلى متغير محلي!

int& at(std::vector<int>& v, size_t i) {
    return v[i];
}

at(v, 0) = 99;   // modifies v[0]

لا تُرجع مرجعًا إلى متغير محلي

ينتهي عمر المتغير المحلي عند عودة الدالة، فيصبح المرجع معلّقًا. وهذا سلوك غير معرّف.

// BUG
int& bad() {
    int x = 10;
    return x;  // x dies here
}

المراجع في حلقة for المعتمدة على النطاق

تستخدم حلقة for المعتمدة على النطاق المراجع ضمنيًا. الحصول على auto& يعطي مرجعًا، بينما الحصول على auto يعطي نسخة.

المراجع في الربط البنيوي

يمكن للربط البنيوي في C++17 أن يتم حسب القيمة أو بالمرجع أو بمرجع const.

std::pair<int, int> p = {1, 2};
auto [a, b] = p;            // copies
auto& [x, y] = p;           // references — modifying x changes p.first

اختبار سريع

لماذا لا يمكن إعادة ربط المرجع بمتغير آخر لاحقًا؟

مراجعة

المرجع اسم مستعار في وقت الترجمة، ويجب تهيئته ولا يمكن إعادة ربطه. ويبدو كمتغير عادي، ولا يكون فارغًا مطلقًا ولا يُعاد تعيينه مطلقًا. استخدم مراجع const للحصول على مناظير للقراءة فقط.

الأسئلة الشائعة

هل درس «لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات» مجاني؟

نعم — نص درس «لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات»؟

تعرّف إلى المراجع بوصفها أسماءً مستعارة أثناء الترجمة، ولا يمكن إعادة ربطها أو جعلها null. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا تُعدّ المراجع أسماءً مستعارة للمتغيرات
  2. التمرير بالقيمة مقابل التمرير بالمرجع
  3. مراجع const ومتى تُستخدم
  4. عمر المرجع والمراجع المتدلية
← العودة إلى C++ Academy