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

auto [a, b]

الربط المُهيكل auto [a, b]

الربط المُهيكل (Structured Bindings) من C++17 يفكّك pair أو tuple أو مصفوفة أو struct لمتغيّرات منفصلة بأسماء واضحة، بسطر واحد.

بدل الوصول لعناصر pair بـ .first/.second غير الواضحين، أو عناصر tuple بـ std::get<index> الرقمي، الربط المُهيكل يعطيك أسماء ذات معنى مباشرة. يعمل مع pair وtuple وarray وأي struct كل أعضائها عامة (public) بترتيب تعريفها. الاستخدام الأشيع عمليًا: تكرار map بشكل مقروء عبر for (auto& [key, val] : m) بدل الاعتماد على .first/.second.

الصياغة

auto [name1, name2, ...] = expression;
auto& [name1, name2] = expression; // بلا نسخ

📄 مثال

std::map<std::string, int> ages = {{"سارة", 28}, {"علي", 35}};

for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

struct Point { double x; double y; };
Point p{3.0, 4.0};
auto [x, y] = p; // x = 3.0, y = 4.0

أهم النقاط

العنصرالوظيفة
مع pair/tupleتفكيك مباشر لكل عنصر باسم مستقل بترتيب النوع
مع structيعمل فقط مع أعضاء عامة (public)، بترتيب تعريفها بالصنف
مع arrayauto [a, b, c] = someArray; — عدد الأسماء يجب أن يطابق حجم المصفوفة بالضبط

💡 نصائح عملية

  • استخدم const auto& بدل auto وحدها بحلقات for على حاويات كبيرة لتفادي نسخ كل عنصر بلا داعٍ
  • دمجه مع tuple يجعل إرجاع عدّة قيم من دالة واحدة أوضح بكثير من std::get<index> الرقمي

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

  • توقّع أنه يعمل مع أي صنف مهما كانت أعضاؤه خاصة (private) — يعمل فقط مع أعضاء عامة أو واجهة tuple-like مخصّصة
  • عدد أسماء لا يطابق عدد عناصر المصدر بالضبط — خطأ ترجمة فوري

خصائص ذات صلة

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