الربط المنظّم وتهيئة if في C++17
فكّك tuples وpairs باستخدام الربط المنظّم، واستخدم عبارات if ذات التهيئة.
الربط المنظّم وتهيئة if في C++17 درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
تفكيك البنية في C++ الحديثة
أضاف C++17 الربط الهيكلي، وهو أسلوب واضح لتفكيك tuples وpairs والمصفوفات والتجميعات إلى متغيرات مسماة منفردة.
الصيغة الأساسية
استخدموا auto [a, b, ...] لتعريف متغيرات مرتبطة بأجزاء القيمة الموجودة على الجانب الأيمن.
std::pair<std::string, int> p = {"Ada", 30};
auto [name, age] = p;
std::cout << name << " is " << age;ربط تكرار map
أوضح تحسين يظهر عند التكرار على map. لا مزيد من it.first وit.second.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << " " << age << "\n";
}الربط بالمراجع
استخدموا auto& للربط بالمرجع. ويؤدي تعديل الأسماء المرتبطة إلى تغيير الكائن الأساسي.
std::pair<int, int> p = {1, 2};
auto& [a, b] = p;
a = 99;
std::cout << p.first; // 99الروابط الثابتة
استخدموا const auto& لتفكيك البنية للقراءة فقط من دون نسخ.
for (const auto& [key, value] : map) {
// read only
}ربط المصفوفات وtuples
يعمل ذلك مع أي نوع يدعم الواجهة الشبيهة بـ tuple، بما في ذلك مصفوفات C وstd::tuple.
int arr[3] = {1, 2, 3};
auto [x, y, z] = arr;
std::tuple<int, std::string, double> t = {1, "hi", 3.14};
auto [a, s, d] = t;ربط البنى العادية
يمكنكم تفكيك أي struct تكون أعضاؤها عامة. وتُستنتج الأسماء من ترتيب التصريح.
struct Point { int x; int y; };
Point pt{3, 4};
auto [x, y] = pt;
std::cout << x << ", " << y;عبارات if-init
أضاف C++17 أيضًا عبارات التهيئة إلى if وswitch. أعلنوا عن متغير مؤقت داخل الترويسة، إذ يقتصر نطاقه على جسم if أو switch.
if (auto it = map.find("Ada"); it != map.end()) {
std::cout << it->second;
} else {
std::cout << "not found";
}الجمع بين الميزتين
يعمل الربط وif-init معًا لإنتاج تعليمات برمجية أنيقة.
if (auto [it, inserted] = m.insert({"key", 42}); inserted) {
std::cout << "added";
} else {
std::cout << "already present";
}عمر الروابط
تشير الروابط إلى كائنات فرعية لمتغير مجهول أساسي. وتظل موجودة حتى نهاية النطاق المحتوي، أي إن عمرها يساوي عمر متغير محلي عادي.
متى لا تستخدموا الروابط؟
إذا كان اسم العضو يحمل معنى سيفقده اسم الربط، ففضّلوا الوصول الصريح إلى العضو. قابلية القراءة أهم من الاختصار.
تحقق سريع
ما ميزة C++17 التي تتيح لكم التكرار على std::map باستخدام أجزاء مسماة من كل زوج؟
مراجعة
تفكك الروابط الهيكلية الأزواج وtuples والمصفوفات وstructs إلى متغيرات مسماة. وعند دمجها مع عبارات if-init في C++17، تجعل تعليمات التكرار والبحث أكثر وضوحًا بكثير.
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «الربط المنظّم وتهيئة if في C++17» مجاني؟
نعم — نص درس «الربط المنظّم وتهيئة if في C++17» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «الربط المنظّم وتهيئة if في C++17»؟
فكّك tuples وpairs باستخدام الربط المنظّم، واستخدم عبارات if ذات التهيئة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الربط المنظّم وتهيئة if في C++17»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- auto وdecltype واستنتاج النوع
- range-based for وnullptr وenum class
- تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية
- الربط المنظّم وتهيئة if في C++17