Ungkapan Lambda: Capture, Mutable, Generik
Tulis lambda dengan capture, semantik mutable dan parameter auto generik.
Ungkapan Lambda: Capture, Mutable, Generik ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah Lambda?
Lambda ialah objek fungsi tanpa nama yang ditulis sebaris. Gunakannya apabila anda biasanya akan menulis fungsi kecil bernama atau struct dengan operator().
auto square = [](int x) { return x * x; };
std::cout << square(5); // 25Anatomi Sintaks
Lambda mempunyai empat bahagian:
[capture]— pemboleh ubah daripada ruang lingkup sekeliling yang hendak digunakan(parameters)— seperti senarai parameter fungsi-> return_type— pilihan, dan sering dideduksi{ body }
Penangkapan Kosong
[] bermaksud "jangan tangkap apa-apa." Lambda hanya mengakses global dan statik.
auto add = [](int a, int b) { return a + b; };Penangkapan Mengikut Nilai
Senaraikan pemboleh ubah dalam klausa penangkapan untuk menyalinnya ke dalam lambda.
int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3); // 15 (captured n was 5)Penangkapan Mengikut Rujukan
Letakkan awalan & untuk membuat penangkapan mengikut rujukan. Perubahan di dalam lambda akan mempengaruhi pemboleh ubah luar.
int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter; // 3Penangkapan Lalai: [=] dan [&]
Tangkap semua yang digunakan mengikut nilai dengan [=], atau semuanya mengikut rujukan dengan [&]. Gunakan dengan berhati-hati — nyatakan secara jelas apabila boleh.
auto f = [=]() { return a + b; }; // copies a, b
auto g = [&]() { return a + b; }; // references a, bLambda Boleh Diubah
Secara lalai, penangkapan mengikut nilai ialah const di dalam lambda. Tambahkan mutable untuk membolehkannya diubah — perubahan itu hanya mempengaruhi salinan lambda.
int n = 5;
auto f = [n]() mutable {
n += 1; // OK because of mutable
return n;
};
f(); f(); // returns 6, then 7
std::cout << n; // still 5 in outer scopeDeduksi Jenis Pulangan
Penyusun membuat deduksi jenis pulangan daripada badan fungsi. Jadikannya jelas apabila diperlukan.
auto half = [](int x) -> double { return x / 2.0; };Lambda Generik (C++14)
Gunakan auto dalam senarai parameter untuk mendapatkan lambda generik yang berfungsi dengan apa-apa jenis.
auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42); // int
print("hello"); // const char*
print(3.14); // doubleLambda sebagai Argumen Fungsi
Algoritma STL menerima lambda sebagai predikat dan transformasi.
std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });Lambda ialah Objek Fungsi
Di sebalik tabir, penyusun menjana class dengan operator(). Anda boleh menyimpan lambda dalam std::function atau auto.
Semakan Pantas
Di dalam lambda [n](int x) { return x * n; }, bolehkah anda menetapkan nilai kepada n tanpa menjadikan lambda itu mutable?
Imbas Kembali
Lambda ialah objek fungsi tanpa nama yang ditulis sebaris. Buat penangkapan mengikut nilai atau rujukan, tandakan dengan mutable untuk mengubah penangkapan nilai, dan gunakan parameter auto untuk lambda generik dalam C++14 dan versi lebih baharu.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Ungkapan Lambda: Capture, Mutable, Generik” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Ungkapan Lambda: Capture, Mutable, Generik”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Ungkapan Lambda: Capture, Mutable, Generik”?
Tulis lambda dengan capture, semantik mutable dan parameter auto generik. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Ungkapan Lambda: Capture, Mutable, Generik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- auto, decltype dan Deduksi Jenis
- for Berasaskan Julat, nullptr dan enum class
- Ungkapan Lambda: Capture, Mutable, Generik
- Binding Berstruktur dan if-init C++17