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)، بترتيب تعريفها بالصنف |
| مع array | auto [a, b, c] = someArray; — عدد الأسماء يجب أن يطابق حجم المصفوفة بالضبط |
💡 نصائح عملية
- استخدم const auto& بدل auto وحدها بحلقات for على حاويات كبيرة لتفادي نسخ كل عنصر بلا داعٍ
- دمجه مع tuple يجعل إرجاع عدّة قيم من دالة واحدة أوضح بكثير من std::get<index> الرقمي
⚠️ أخطاء شائعة
- توقّع أنه يعمل مع أي صنف مهما كانت أعضاؤه خاصة (private) — يعمل فقط مع أعضاء عامة أو واجهة tuple-like مخصّصة
- عدد أسماء لا يطابق عدد عناصر المصدر بالضبط — خطأ ترجمة فوري
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.