Pilihan antara lambda dan kelas functor adalah pertukaran.
Keuntungan dari lambda sebagian besar sintaksis, dengan meminimalkan jumlah boilerplate dan memungkinkan kode terkait secara konseptual ditulis inline, di dalam fungsi yang akan menggunakannya (segera atau lambat).
Dari segi kinerja, ini tidak lebih buruk dari kelas functor , yang merupakan C ++ struct atau kelas yang berisi "metode" tunggal. Bahkan, kompiler memperlakukan lambda tidak berbeda dengan kelas functor yang dihasilkan kompiler di belakang layar.
// 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);
Dalam contoh kode Anda, kinerja-bijaksana itu tidak berbeda dari panggilan fungsi, karena kelas functor kebetulan tidak memiliki keadaan (karena memiliki klausa tangkap kosong), sehingga tidak memerlukan alokasi, konstruktor atau penghancuran.
int some_computer_generated_gibberish_0123456789_method_more_gibberish(int x)
{
if (...) return ...;
return ...;
}
Mendebug kode C ++ non-sepele menggunakan disassembler selalu menjadi tugas yang sulit. Ini benar dengan atau tanpa menggunakan lambda. Ini disebabkan oleh optimisasi kode canggih oleh kompiler C ++ yang menghasilkan penataan ulang, interleaving, dan penghilangan kode mati.
Aspek penyusunan nama agak tidak menyenangkan, dan dukungan debugger untuk lambda masih dalam masa pertumbuhan . Hanya dapat diharapkan bahwa dukungan debugger akan meningkat seiring waktu.
Saat ini, cara terbaik untuk men-debug kode lambda adalah dengan menggunakan debugger yang mendukung pengaturan breakpoint pada tingkat kode sumber, yaitu dengan menentukan nama file sumber dan nomor baris.