"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Lambdas vs. Bind في C++: متى يجب عليك اختيار كل منهما؟

Lambdas vs. Bind في C++: متى يجب عليك اختيار كل منهما؟

تم النشر بتاريخ 2024-11-09
تصفح:376

Lambdas vs. Bind in C  : When Should You Choose Each?

Lambdas vs. Bind in C: تعدد الأشكال والكفاءة

عند مقارنة استخدام C 0x lambdas و std::bind لمهام مماثلة ، يمكن أن يتأثر الاختيار بين الاثنين بعوامل مثل تعدد الأشكال والكفاءة.

Bind vs. Lambda in التفاصيل

فكر في المثال التالي حيث يتم استخدام كل من lambda وbind لإنشاء أرقام عشوائية باستخدام التوزيع والمحرك:

// Using lambda
auto dice = [&]() { return distribution(engine); };

// Using bind
auto dice = bind(distribution, engine);

تعدد الأشكال

على عكس لامدا، وهي أحادية الشكل (أي لها أنواع ثابتة)، يسمح std::bind بتعدد الأشكال سلوك. هذا يعني أنه يمكن استخدام الربط لإنشاء دوال بأنواع غير معروفة، كما هو موضح أدناه:

struct foo { typedef void result_type; القالب عامل التشغيل الفارغ () (أ أ، ب ب) { cout struct foo { typedef void result_type; template void operator()(A a, B b) { cout في هذا المثال، يتم استنتاج نوعي a وb في وقت التشغيل عند استدعاء f. هذه المرونة غير متوفرة مع لامدا.

الكفاءة بشكل عام، تميل لامدا إلى أن تكون أكثر كفاءة من الربط عندما يتم استخدام المتغيرات التي تم التقاطها حسب القيمة. وذلك لأن lambdas تلتقط المتغيرات مباشرة، بينما يقوم bind بإنشاء كائن إغلاق يشير إلى المتغيرات الملتقطة. ومع ذلك، قد يوفر bind مزايا عندما تكون المتغيرات الملتقطة كبيرة أو عندما يتم استدعاء الدالة بشكل متكرر.

الاستنتاج

يعتمد الاختيار بين lambdas وbind على المتطلبات المحددة. من التطبيق. توفر Lambdas تعدد الأشكال وتكون فعالة في التقاط متغيرات صغيرة من نوع القيمة. يوفر Bind قدرًا أكبر من المرونة وقد يكون مفضلاً عند التعامل مع الوظائف الكبيرة أو التي يتم استدعاؤها بشكل متكرر.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3