تخطَّ إلى المحتوى

namespace

فضاءات الأسماء namespace

namespace تجمع مجموعة أسماء (دوال، أصناف، متغيرات) تحت مظلة واحدة لتفادي تعارض الأسماء بين مكتبات مختلفة.

بمشروع كبير يستخدم عدة مكتبات، احتمال تكرار اسم دالة أو صنف بين مكتبتين وارد جدًا. namespace يحل هذا بتغليف الأسماء داخل نطاق مسمّى، فتنادي العنصر بصيغة NamespaceName::Item بدل تعارضه المباشر مع اسم مشابه بمكان آخر. مكتبة C++ القياسية كلها موجودة داخل std::.

تجنّب using namespace std; بملفات header — تسحب كل الأسماء لنطاق عام وتزيد احتمال التعارض بمشاريع كبيرة؛ استخدم إما البادئة std:: صراحة أو using std::cout; لعنصر واحد فقط.

الصياغة

namespace Name {
    // دوال وأصناف ومتغيرات
}
Name::item;

📄 مثال

namespace Math {
    double square(double x) { return x * x; }
}

namespace Physics {
    double square(double x) { return x * x * 9.8; } // اسم متطابق، بدون تعارض
}

std::cout << Math::square(4) << " " << Physics::square(4);

أهم النقاط

العنصرالوظيفة
namespace X { }تعريف فضاء اسم جديد يحتوي عناصر مرتبطة
X::itemالوصول لعنصر داخل فضاء اسم محدد
using namespace X;يسحب كل أسماء X للنطاق الحالي — استخدمها بحذر
using X::item;يسحب عنصرًا واحدًا فقط — أكثر أمانًا

💡 نصائح عملية

  • لا تكتب using namespace std; داخل ملفات .h — يلوّث كل ملف يستورد الهيدر
  • namespace متداخلة (namespace A::B { }) مفيدة لتنظيم مكتبات كبيرة بمشاريعك

⚠️ أخطاء شائعة

  • using namespace std; بملف هيدر عام يسبب تعارضات أسماء صعبة التتبع بمشاريع كبيرة
  • نسيان أن std::cout وstd::vector وغيرها كلها داخل namespace std

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.