免费发布信息
微信公众号
当前位置: 首页 » 帮助中心 » 常见问题 » 正文

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

   来源:黔优网时间:2024-09-20 15:31:57 浏览量:1

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

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

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

捕获变量的两种类型:

值捕获:复制定义作用域中的变量的值并存储在 Lambda 表达式中。

引用捕获:获取对定义作用域中变量的引用,并在运行时直接访问它们。

按引用捕获变量:

立即学习“C++免费学习笔记(深入)”;

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 表达式中捕获变量的机制的详细内容,更多请关注本网内其它相关文章!

 
 
没用 0举报 收藏 0
免责声明:
黔优网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优网官方立场,请读者仅做参考。本文标题:C++ lambda 表达式中捕获变量的机制,本文链接:https://www.qianu.com/help/43142.html,欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法信息,请您立即点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文
推荐帮助中心