Avatar ·

ما هو تعبير lambda في C++ ومتى يجب استخدامه؟

مرحباً بالجميع! أنا أتعلم C++ وكثيراً ما أرى في كود زملائي شيئاً مثل هذا: ```cpp std::vector numbers = {5, 2, 8, 1, 9}; std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); ``` أو هكذا: ```cpp std::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; }); ``` أفهم أن هذه دوال مجهولة، لكنني لا أفهمها تماماً. في التوثيق مكتوب "تعبيرات lambda"، لكن الشروحات معقدة نوعاً ما. لدي عدة أسئلة: 1. ما هو تعبير lambda بكلمات بسيطة؟ وكيف يختلف عن الدالة العادية؟ 2. لماذا نحتاج الأقواس المربعة `[]` في البداية؟ ماذا يمكن كتابة فيها؟ 3. متى من الأفضل استخدام lambda، ومتى استخدام دالة عادية أو functor؟ 4. كيف يتم التقاط المتغيرات بشكل صحيح؟ رأيت `[=]` و `[&]` و `[this]` — ماذا يعني هذا؟ خصوصاً أن بناء الجملة مع الالتقاط يخيفني. حاولت كتابة callback خاص بي للترتيب باستخدام متغير خارجي، ولم ينجح الأمر. اشرحوا لي من فضلكم