Dengan menghantar parameter melalui senarai tangkapan, ungkapan lambda boleh mengakses pembolehubah luaran. Mengambil parameter jenis int sebagai contoh, senarai tangkapan ialah [x](int y), dengan x ialah pembolehubah luaran dan y ialah parameter ungkapan lambda. Menggunakan teknik ini, ungkapan lambda boleh digunakan dalam pelbagai senario, seperti penjumlahan tatasusunan, di mana fungsi std::accumulate mengumpul elemen tatasusunan menjadi pembolehubah dengan nilai awal 0, yang terkumpul satu demi satu melalui ungkapan lambda.
Ungkapan Lambda ialah fungsi tanpa nama dipermudah yang digunakan secara meluas dalam C++ untuk mentakrifkan fungsi sebaris secara ringkas dan cekap. Untuk ungkapan lambda untuk mengakses pembolehubah luaran, senarai tangkapan digunakan. Perkara yang sama berlaku untuk lulus parameter.
Senarai tangkapan mendahului senarai parameter ungkapan lambda dan disertakan dengan [
dan ]
. Ia boleh menangkap pembolehubah tempatan dan pembolehubah luaran. Untuk lulus parameter, anda perlu menentukan jenis dan nama parameter dalam senarai tangkapan. [
和 ]
括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。
// 捕获列表传递 int 参数 auto lambda = [x](int y) { return x + y; };
上面的示例定义了一个 lambda 表达式 lambda
,它接收一个名为 y
的 int
型参数,并且可以访问外部局部变量 x
。
考虑一个需要将数组中的所有元素求和的场景。可以使用带有捕获列表传递参数的 lambda 表达式来简化此操作:
#include <vector> #include <algorithm> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; int sum = std::accumulate(numbers.begin(), numbers.end(), 0, [](int x, int y) { return x + y; }); std::cout << "Sum: " << sum << std::endl; return 0; }
在这个例子中,std::accumulate
函数使用提供的 lambda 表达式将数组 numbers
中的元素逐个累加到初始值为 0
的 sum
中。lambda 表达式接收两个整数参数 x
和 y
,并返回它们的和。
=
表示 by value,用 &
rrreeelambda
yang menerima parameter jenis int
bernama y
dan boleh mengakses pembolehubah Setempat luaran x
. std::accumulate
menggunakan ungkapan lambda yang disediakan untuk menukar tatasusunan sum
dengan nilai awal 0
. Ungkapan lambda mengambil dua parameter integer x
dan y
dan mengembalikan jumlahnya. =
untuk mewakili mengikut nilai dan &
untuk mewakili melalui rujukan. 🎜🎜🎜Nota tentang hayat pembolehubah: 🎜 Ungkapan lambda hanya boleh mengakses pembolehubah tempatan yang wujud sepanjang hayatnya. 🎜🎜🎜Elakkan menangkap objek besar: 🎜Merakam objek besar boleh menyebabkan masalah prestasi kerana ia memerlukan memori tambahan. 🎜🎜Atas ialah kandungan terperinci Bagaimana untuk lulus parameter dalam ungkapan C++ Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!