我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这篇文章主要讲解了“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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

C++中的Lambda函数怎么使用

这篇文章主要讲解了“C++中的Lambda函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的Lambda函数怎么使用”吧!一 函数语法我们平时调用函数的时候,都是需要被调用
2023-06-22

C++超详细梳理lambda和function的使用方法

C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式实质上是创建一个匿名函数/对象,这篇文章主要介绍了lambda和function的使用方法
2022-11-13

C++ lambda函数怎么使用

本篇内容介绍了“C++ lambda函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Lambda 表达式Lambda 表达式是现代
2023-07-05

C++11中的lambda表达式怎么使用

本篇内容介绍了“C++11中的lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!可调用对象对于一个表达式e,如果可以编
2023-06-19

C++11中的lambda匿名函数怎么使用

本篇内容主要讲解“C++11中的lambda匿名函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11中的lambda匿名函数怎么使用”吧!lambda 源自希腊字母表中第 11
2023-07-04

C++11的lambda表达式怎么使用

这篇文章主要讲解了“C++11的lambda表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的lambda表达式怎么使用”吧!可变lambda假设有如下vector,保
2023-06-19

C++中modifystyleex方法怎么使用

在C++中,ModifyStyleEx方法用于修改指定窗口的扩展样式。该方法的原型如下:BOOL ModifyStyleEx(DWORD dwRemove,DWORD dwAdd,UINT nFlags = 0);参数解释:dwRemo
C++中modifystyleex方法怎么使用
2024-02-29

C#中Response.End方法怎么使用

在C#中,Response.End方法用于停止处理当前请求并发送响应到客户端。它有两个重载方法:1. Response.End(): 这个方法不带任何参数,它会立即停止处理当前请求,并发送响应到客户端。但是,它会引发ThreadAbortE
2023-09-16

C#中socket.receive方法怎么使用

在C#中,可以使用Socket类的Receive方法来接收数据。该方法有多种重载形式。以下是一个基本的用法示例:using System;using System.Net;using System.Net.Sockets;public
C#中socket.receive方法怎么使用
2024-02-29

C#中的Task.WhenAll和Task.WhenAny方法怎么用

本篇内容介绍了“C#中的Task.WhenAll和Task.WhenAny方法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介T
2023-06-30

C#中怎么定义和使用泛型类和方法

在C#中,泛型类和方法可以让你编写更加灵活和可复用的代码。以下是如何定义和使用泛型类和方法的示例:定义泛型类:public class GenericClass{private T _value;public GenericCl
C#中怎么定义和使用泛型类和方法
2024-03-06

C++11中的可变参数模板和lambda表达式怎么使用

本篇内容介绍了“C++11中的可变参数模板和lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.可变参数模板C++1
2023-07-05

C#中TransactionScope的使用方法和原理

在C#中,TransactionScope用于创建一个事务范围,能够确保一系列数据库操作要么全部成功提交,要么全部回滚。TransactionScope采用了分布式事务的机制,可以跨越多个数据库连接、多个数据库以及分布式系统。使用方法:1.
2023-09-01

c#的ExecuteScalar()方法怎么使用

C#中的ExecuteScalar()方法用于执行SQL查询,并返回结果集中的第一行第一列的值。以下是使用ExecuteScalar()方法的示例:```csharpusing System;using System.Data.SqlCli
2023-09-14

C# String.IndexOf()方法怎么使用

C#中的String.IndexOf()方法用于在字符串中查找指定字符或子字符串的第一个匹配项,并返回其索引位置。该方法有多种重载形式,可以根据不同的需求使用。以下是常见的使用方式:1. 查找单个字符的索引位置:csharpstring s
2023-10-18

c语言中getstring方法怎么使用

在C语言中,没有名为"getstring"的方法。不过,你可以使用fgets函数来获取用户输入的字符串。fgets函数从标准输入读取一行字符串并将其存储在指定的字符数组中。下面是使用fgets函数获取字符串的示例代码:```c#includ
2023-09-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录