日期:
来源:Linux公社收集编辑:聆听世界的鱼
点击上方蓝字 ● 关注Linux公社
[ capture list ] ( argument list ) -> return type { function body }
捕获列表(capture list)用于指定 lambda 中可访问的来自外部作用域的变量。变量可以通过值捕获、引用捕获或使用 this 捕获。 参数列表( argument list
)指定将递给 lambda 的参数。返回类型( return type
)指定 lambda 将返回的值的类型。如果未指定,则编译器将尝试推断其类型。函数体( function body
)指定 lambda 被调用时将执行的代码。
函数回调(Function Callbacks) 默认捕获(Capturing default) 值捕获(Capturing by value) 引用捕获(Capturing by reference) 可变 lambda(Mutable Lambdas)
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// Lambda 表达式,用于查找两个数字的和
auto sum = [](int a, int b) { return a + b; };
int result = std::accumulate(numbers.begin(), numbers.end(), 0, sum);
std::cout << "Sum of elements in the vector: " << result << std::endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> vec = { 1, 2, 3, 4, 5 };
int sum = 0;
std::for_each(vec.begin(), vec.end(), [&sum](int x) { sum += x; });
std::cout << "The sum is: " << sum << std::endl;
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [ ]() { std::cout << x << std::endl; };
f();
return 0;
}
#include <iostream>
int main()
{
auto square = [](int x) { return x * x; };
std::cout << "The square of 5 is: " << square(5) << std::endl;
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [x]() { std::cout << x << std::endl; };
f();
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [x](int y) { std::cout << x+y << std::endl;};
f(1);
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [&x]() { std::cout << x << std::endl; };
f();
return 0;
}
#include <iostream>
int main() {
int x = 10;
auto add_one = [&x]() { ++x; };
add_one();
std::cout << x << "\n";
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [&x]() { std::cout << x << std::endl; };
f();
return 0;
}
#include <iostream>
int main() {
int x = 42;
auto f = [x]() mutable { std::cout << ++x << std::endl; };
f();
return 0;
}
内联函数:编译器会自动将 lambda 表达式内联,这意味着它们的代码直接插入到调用函数中。这可以减少函数调用的开销并提高性能。 避免命名函数的开销:lambda 表达式没有名称,因此它们不必被声明和存储在符号表中,这可以减少开销并提高性能。 改善高速缓存局部性:lambda 表达式可以在同一个函数中定义和使用,这意味着lambda使用的代码和数据将存储在与调用代码相同的高速缓存行中。这可以改善高速缓存局部性并降低高速缓存失效的成本。 减小代码大小:lambda 表达式通常比命名函数小,并且它们不需要外部函数调用,这可以减小编译代码的大小并提高性能。 增加灵活性:lambda 表达式可以用来将函数作为参数传递给其他函数,这提供了更大的灵活性,可以改善性能,减少重复代码的需求。 提高可读性:lambda 表达式可以通过以紧凑而自包含的方式封装复杂的逻辑来使代码更易于阅读。这可以通过使代码更易于理解和维护来提高性能。
链接:https://www.linuxmi.com/c-lambda.html
关注我们 长按或扫描下面二维码关注 Linux公社
关注 Linux公社,添加“ 星标 ”
每天 获取 技术干货,让我们一起成长
合作联系:root@linuxidc.net