ทางเลือกระหว่างแลมบ์ดาและฟังก์ชั่นระดับคือการแลกเปลี่ยน
กำไรจากแลมบ์ดานั้นส่วนใหญ่เป็นประโยคโดยลดจำนวนสำเร็จรูปและอนุญาตให้เขียนโค้ดที่เกี่ยวข้องกับแนวคิดที่จะเขียนแบบอินไลน์ภายในฟังก์ชั่นที่จะใช้มัน (ทันทีหรือในภายหลัง)
ประสิทธิภาพการทำงานที่ชาญฉลาดนี้ไม่แย่ไปกว่าคลาส functorซึ่งเป็นโครงสร้าง 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);
ในตัวอย่างโค้ดของคุณประสิทธิภาพที่ได้ไม่แตกต่างจากการเรียกใช้ฟังก์ชั่นเนื่องจากคลาส functor นั้นไม่มีสถานะ (เนื่องจากมีประโยคการจับภาพที่ว่างเปล่า) ดังนั้นจึงไม่ต้องมีการจัดสรรคอนสตรัคเตอร์หรือการทำลาย
int some_computer_generated_gibberish_0123456789_method_more_gibberish(int x)
{
if (...) return ...;
return ...;
}
การดีบักโค้ด C ++ ที่ไม่สำคัญโดยใช้ disassembler นั้นเป็นงานที่ยากเสมอ นี่เป็นเรื่องจริงที่มีหรือไม่มีการใช้แลมบ์ดา นี่คือสาเหตุที่เกิดจากการเพิ่มประสิทธิภาพของรหัสที่ซับซ้อนโดยคอมไพเลอร์ C ++ ที่ส่งผลให้เกิดการเรียงลำดับใหม่, interleaving และกำจัดรหัสที่ตายแล้ว
แง่มุมของชื่อ mangling นั้นค่อนข้างไม่ปลอดภัยและการรองรับตัวดีบั๊กสำหรับแลมบ์ดายังอยู่ในช่วงเริ่มต้น สามารถหวังได้ว่าการสนับสนุนการดีบักเกอร์จะดีขึ้นเมื่อเวลาผ่านไป
ปัจจุบันวิธีที่ดีที่สุดในการดีบักรหัสแลมบ์ดาคือการใช้ดีบักเกอร์ที่รองรับการตั้งค่าเบรกพอยต์ในระดับซอร์สโค้ดเช่นโดยการระบุชื่อไฟล์ต้นฉบับและหมายเลขบรรทัด