लैम्ब्डा और फन्क्टर-क्लास के बीच का विकल्प एक ट्रेडऑफ है।
लैम्ब्डा से लाभ ज्यादातर सिंटैक्टिक है, बॉयलरप्लेट की मात्रा को कम करके और फंक्शनल-संबंधित कोड को इनलाइन में लिखने की अनुमति देता है, फ़ंक्शन के अंदर जो इसे (तुरंत या बाद में) उपयोग करने जा रहा है।
प्रदर्शन-वार, यह किसी फ़नकार वर्ग से भी बदतर नहीं है , जो एक C ++ संरचना या वर्ग है जिसमें एकल "विधि" शामिल है। वास्तव में, संकलक लैम्ब्डा का इलाज करते हैं जो दृश्य के पीछे संकलक-जनित फनकार वर्ग से अलग नहीं है।
// define the functor method somewhere
struct some_computer_generated_gibberish_0123456789
{
int operator() (int x) const
{
if (x == 2) return 5;
if (x == 3) return 6;
return 0;
}
};
// make a call
some_computer_generated_gibberish_0123456789 an_instance_of_0123456789;
int outputValue = an_instance_of_0123456789(inputValue);
आपके कोड उदाहरण में, प्रदर्शन-वार यह एक फ़ंक्शन कॉल से अलग नहीं है, क्योंकि फ़नकार वर्ग का कोई राज्य नहीं है (क्योंकि इसमें एक खाली कैप्चर क्लॉज़ है), इस प्रकार किसी आवंटन, निर्माण या विनाश की आवश्यकता नहीं है।
int some_computer_generated_gibberish_0123456789_method_more_gibberish(int x)
{
if (...) return ...;
return ...;
}
किसी भी गैर-तुच्छ सी ++ कोड का डिस्सेम्बलर का उपयोग करना हमेशा मुश्किल काम रहा है। लैम्बडा के उपयोग के साथ या इसके बिना यह सच है। यह C ++ कंपाइलर द्वारा परिष्कृत कोड ऑप्टिमाइज़ेशन के कारण होता है, जिसके परिणामस्वरूप री-कोडिंग, इंटरलेविंग और डेड कोड एलिमिनेशन होता है।
नाम-पहल का पहलू कुछ हद तक अप्राप्य है, और लैम्ब्डा के लिए डिबगर समर्थन अभी भी अपनी प्रारंभिक अवस्था में है । यह केवल आशा की जा सकती है कि समय के साथ डिबगर समर्थन में सुधार होगा।
वर्तमान में, लैम्ब्डा कोड को डीबग करने का सबसे अच्छा तरीका एक डीबगर का उपयोग करना है जो स्रोत कोड स्तर पर ब्रेकप्वाइंट सेट करने का समर्थन करता है, अर्थात स्रोत फ़ाइल नाम और लाइन नंबर निर्दिष्ट करके।