您的位置 首页 知识分享

C++ lambda 表达式中捕获变量的机制

++ lambda 表达式中捕获变量的机制可分为两种类型:按值捕获(复制定义中的变量)和按引用捕获(直接访问定…

++ lambda 表达式中捕获变量的机制可分为两种类型:按值捕获(复制定义中的变量)和按引用捕获(直接访问定义作用域中的变量)。按引用捕获允许 lambda 表达式更改定义作用域中的变量,而按值捕获不会。

C++ lambda 表达式中捕获变量的机制

C++ Lambda 表达式中捕获变量的机制

Lambda 表达式是 C++ 中的匿名函数,可以捕获其定义作用域中的变量。捕获变量的机制决定了 Lambda 表达式如何在运行时访问这些变量。

捕获变量的两种类型:

  • 值捕获:复制定义作用域中的变量的值并存储在 Lambda 表达式中。
  • 引用捕获:获取对定义作用域中变量的引用,并在运行时直接访问它们。

按引用捕获变量:

立即学习“”;

int global_variable = 10; auto lambda = [&](int x) {   global_variable += x;   cout << "Global variable: " << global_variable << endl; };  lambda(5); // 输出:Global variable: 15
登录后复制

在上面的示例中,Lambda 表达式通过 [&] 捕获符按引用捕获 global_variable 变量。更改 Lambda 表达式中的 global_variable 也会在定义作用域中更新其值。

按值捕获变量:

int global_variable = 10; auto lambda = [=](int x) {   int local_variable = x; // Lambda 表达式中独立的本地变量   cout << "Local variable: " << local_variable << endl; };  lambda(5); // 输出:Local variable: 5
登录后复制

在这个示例中,Lambda 表达式通过 [=] 捕获符按值捕获 global_variable 变量。在 Lambda 表达式中更改 global_variable 不会影响定义作用域中的值。

实战案例:

假设您有一个向量,您想要创建一个 Lambda 表达式来查找向量中所有大于某个指定值的元素。以下是实现方法:

vector<int> numbers = {1, 3, 5, 7, 9}; int threshold = 5; auto lambda = [&numbers, threshold](int n) {   return n > threshold; };  // 使用 std::find_if()/lambda查找符合条件的元素 auto it = std::find_if(numbers.begin(), numbers.end(), lambda); if (it != numbers.end()) {   cout << "符合条件的元素: " << *it << endl; } else {   cout << "没有符合条件的元素。" << endl; }
登录后复制

在这个示例中,Lambda 表达式按引用捕获了 numbers 和 threshold 变量。std::find_if() 函数用此 Lambda 表达式来遍历向量并查找符合条件的元素。

以上就是C++ lambda 表达式中捕获变量的机制的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/870.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部