Objek fungsi dan ungkapan lambda ialah kedua-dua alat untuk mencipta fungsi tanpa nama. Perbezaan utama ialah: Sintaks: Objek fungsi menggunakan definisi kelas, manakala ungkapan lambda menggunakan sintaks []. Skop: Objek fungsi boleh digunakan di luar kelas, manakala ungkapan lambda terhad kepada skop definisi. Tangkap: Objek fungsi tidak boleh menangkap pembolehubah luaran, tetapi ungkapan lambda boleh menangkap melalui senarai tangkapan. Overhed: Overhed penciptaan objek fungsi adalah rendah, overhed ungkapan lambda adalah tinggi. Kebolehgunaan semula: Objek fungsi biasanya boleh diguna semula, ungkapan lambda biasanya sekali guna.
Perbezaan antara objek fungsi STL dan ungkapan lambda C++
Objek fungsi dan ungkapan lambda ialah kedua-dua alat yang digunakan untuk mencipta fungsi tanpa nama dalam C++. Walaupun mereka mempunyai persamaan, terdapat juga perbezaan utama:
Syntax
[]
sintaks. Skop
Tangkap
Overhead
Kebolehgunaan semula
Kes Praktikal
Katakan kita mempunyai tatasusunan integer dan kita ingin mencari elemen pertama yang memenuhi syarat tertentu (contohnya, elemen pertama lebih besar daripada 10).
Menggunakan objek fungsi:
class GreaterThan10 { public: bool operator()(int x) { return x > 10; } }; int main() { int arr[] = {1, 5, 7, 12, 14}; auto found = find_if(begin(arr), end(arr), GreaterThan10()); if (found != end(arr)) { cout << "First number greater than 10: " << *found << endl; } return 0; }
Menggunakan ungkapan lambda:
int main() { int arr[] = {1, 5, 7, 12, 14}; auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; }); if (found != end(arr)) { cout << "First number greater than 10: " << *found << endl; } return 0; }
Dalam contoh ini, ungkapan lambda digunakan untuk mencipta fungsi tanpa nama yang menentukan sama ada integer lebih besar daripada 10.
Atas ialah kandungan terperinci Apakah perbezaan antara objek fungsi STL dan ungkapan lambda C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!