您的位置 首页 知识分享

C++ 匿名函数与函数对象的lambda表达式对比

匿名函数和 lambda 表达式均可创建无名称函数,语法不同:匿名函数:[] + 函数体;lambda 表达式…

匿名函数和 lambda 表达式均可创建无名称函数,语法不同:匿名函数:[] + 函数体;lambda 表达式:[] + 参数 -> 返回类型。匿名函数无法捕获外部变量,lambda 表达式可通过 [&] 或 [=] 捕获。

C++ 匿名函数与函数对象的lambda表达式对比

C++ 匿名函数与函数对象的 lambda 表达式对比

简介

C++ 中提供了匿名函数和函数对象两种机制,用于创建和使用包含可执行代码但没有名称的函数。匿名函数和 lambda 表达式都是强大的工具,但它们在语法和语义上存在一些差异。

立即学习“”;

点击下载“”;

语法

  • 匿名函数:通过 [] 符号和函数体定义。

    // 匿名函数 auto anon_func = [](int x) { return x * x; };
    登录后复制
  • lambda 表达式:以 [] 符号开始,用 -> 箭头分隔参数和返回类型。

    // lambda 表达式 auto lambda_expr = [](int x) -> int { return x * x; };
    登录后复制

capturable 对象

  • 匿名函数:不能捕获外部变量。
  • lambda 表达式:可以通过 [&] 和 [=] 关键字捕获外部变量。

语义

  • 匿函数:通常用于一次性使用,在创建后立即调用。
  • lambda 表达式:可以捕获外部变量并重复调用。

实战案例:对容器中元素进行平方

考虑一个包含整型元素的向量 v。

匿名函数:

#include <vector> #include <algorithm>  using namespace std;  int main() {   vector<int> v = {1, 2, 3, 4};      // 利用匿名函数对元素进行平方   transform(v.begin(), v.end(), v.begin(), [](int x) { return x * x; });      // 打印平方后的结果   for (int x : v) {     cout << x << " ";   }   cout << endl;      return 0; }
登录后复制

lambda 表达式:

#include <vector> #include <algorithm>  using namespace std;  int main() {   vector<int> v = {1, 2, 3, 4};      // 使用 lambda 表达式捕获外部变量 v   auto square_lambda = [v](int x) {      // 捕获外部向量 v 并对元素进行平方     return x * v.size();    };      // 利用 lambda 表达式对元素进行平方   transform(v.begin(), v.end(), v.begin(), square_lambda);      // 打印平方后的结果   for (int x : v) {     cout << x << " ";   }   cout << endl;      return 0; }
登录后复制

以上就是C++ 匿名函数与函数对象的lambda表达式对比的详细内容,更多请关注php中文网其它相关文章!

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

作者: nijia

发表评论

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

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

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

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

微信扫一扫关注我们

关注微博
返回顶部