文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++和C#中的lambda方法怎么使用

2023-07-02 10:11

关注

这篇文章主要讲解了“C++和C#中的lambda方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++和C#中的lambda方法怎么使用”吧!

一、语法定义

首先我们看下 C++ 语法定义格式:

[capture] (parameters) mutable ->return-type{statement}

相比 C# lambda 的语法格式:

(parameters) => {return-type statement}

要复杂一些,之所以复杂还是因为 C++ 让程序员用的必须更谨慎一些。

二、谨慎在哪里?

为了说明更谨慎在哪里,我们上一个简单的例子。

int main() {int a = 1;int b = 2;auto func = [](int c) -> void {cout << "input:" << c << endl;};func(10);return 0;}

C++和C#中的lambda方法怎么使用

上面就定义了一个原子化的 lambda 函数,在现实开发中往往不仅要获取参数,还要获取 外部作用域 的变量,比如说,我想计算 a+b+c 的结果,

接下来稍微改一下代码:

C++和C#中的lambda方法怎么使用

可以看到,居然给报错了,在 C# 中可是一点问题都没有。

C++和C#中的lambda方法怎么使用

1. 谨慎1 :屏蔽外部所有作用域变量

C++ 默认屏蔽所有的外部作用域值,这么做大概率还是想让程序员知道自己的意图,这相比 C# 要严谨的多,算是喜忧参半吧。

那如何让 C++ 代码通过呢? 这就需要用到语法格式中的 [capture] 部分,简而言之就是需要告诉编译器打开栅栏放哪些变量进来????????????,比如 =,&,两者都可以访问所有的外部作用域变量,不同的是前者是 按传值方式,后者 按引用方式

按值方式

有了思路后,修改代码如下:

int main() {int a = 1;int b = 2;auto func = [=](int c) -> void {auto sum = a + b + c;cout << "sum:" << sum << endl;};func(10);return 0;}

C++和C#中的lambda方法怎么使用

哈哈,这个问题我们完美搞定。

按引用方式

大家都知道,按引用 传的是地址,言外之意就是可以做到 原地修改,接下来我们修改下代码。

int main() {int a = 1;auto func1 = [&]() -> void {a = 10;};func1();cout << "a =" << a << endl;return 0;}

C++和C#中的lambda方法怎么使用

谨慎2:屏蔽所有按值传递的修改

为了方便说明,我们先看图:

C++和C#中的lambda方法怎么使用

可以看到,按值传递进来的值都是无法修改的,这么做主要还是怕程序员弄混了,如果一定要让代码通过,就需要增加语法格式中的 mutable 项,本质上就是踢掉默认的 const ,这样在方法体中就可以修改 a 变量,

修改代码如下:

int main() {int a = 1;auto func1 = [=]() mutable -> void {a = 10;};func1();cout << "a =" << a << endl;return 0;}

C++和C#中的lambda方法怎么使用

哈哈,成功修改,当然语句够简单的话,还可以将下面的代码:

auto func1 = [&]() -> void {a = 10;};

修改成如下:

auto func1 = [&]() {a = 10;};

关于作用域方面还有很多好玩的,比如只放某一个变量进来。

C++和C#中的lambda方法怎么使用

感谢各位的阅读,以上就是“C++和C#中的lambda方法怎么使用”的内容了,经过本文的学习后,相信大家对C++和C#中的lambda方法怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯