返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 和 C# 中的 lambda的方法技巧
  • 343
分享到

C++ 和 C# 中的 lambda的方法技巧

2024-04-02 19:04:59 343人浏览 八月长安
摘要

目录一、语法定义二、谨慎在哪里?谨慎1 :屏蔽外部所有作用域变量谨慎2:屏蔽所有按值传递的修改前言: 这几天在看 c++ 的 lambda 表达式,挺有意思,这个标准是在 C11标准

前言:

这几天在看 c++ 的 lambda 表达式,挺有意思,这个标准是在 C11标准 加进去的,也就是 2011 年,相比 C# 2007 还晚了个 4 年, 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;
}

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

接下来稍微改一下代码:

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

谨慎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;
}

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

按引用方式

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

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

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

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

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

修改代码如下:

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

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

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

修改成如下:

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

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

总体上来说,C++ 的 lambda 的格式相比 C# 更严谨,反过来说就是不太相信 C++ 程序员有能力用好。

到此这篇关于C++ 和 C# 中的 lambda的方法技巧的文章就介绍到这了,更多相关C++ lambda 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 和 C# 中的 lambda的方法技巧

本文链接: https://lsjlt.com/news/151831.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 和 C# 中的 lambda的方法技巧
    目录一、语法定义二、谨慎在哪里?谨慎1 :屏蔽外部所有作用域变量谨慎2:屏蔽所有按值传递的修改前言: 这几天在看 C++ 的 lambda 表达式,挺有意思,这个标准是在 C11标准...
    99+
    2024-04-02
  • C++和C#中的lambda方法怎么使用
    这篇文章主要讲解了“C++和C#中的lambda方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++和C#中的lambda方法怎么使用”吧!一、语法定义首先我们看下 C++ 语法...
    99+
    2023-07-02
  • C#中常见的性能优化技巧及方法
    C#中常见的性能优化技巧及方法导言:性能是软件开发中一个非常重要的指标,优化代码以提升系统的性能是每个开发者的必备技能。本文将介绍一些在C#中常见的性能优化技巧和方法,并配以具体的代码示例,帮助读者更好地理解和应用。一、避免频繁的对象创建和...
    99+
    2023-10-22
    缓存 多线程 数据压缩
  • C++ lambda 表达式的性能优化有哪些技巧?
    优化 c++++ lambda 表达式的性能技巧包括:避免创建不必要的 lambda 对象通过 std::bind 显式捕获最小的对象使用 std::move 移动捕获的变量以避免复制优...
    99+
    2024-04-17
    lambda 性能优化 c++
  • C#中 MessageBox的使用技巧
    目录前言1.创建窗体文件1.1 设计界面2.认识消息对话框的属性和图标3.MessageBox消息对话框实现效果3.1 AbortRetryIgnore效果展示3.2 OK效果展示3...
    99+
    2022-11-13
    C#  MessageBox使用技巧 C# MessageBox
  • C#中 MessageBox的使用技巧
    在C#中,MessageBox是一个弹出窗口,用于显示消息或提示给用户。下面是一些MessageBox的使用技巧:1. 弹出一个简单...
    99+
    2023-08-16
    C#
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2024-04-02
  • c++编程的技巧
    这篇文章主要介绍c++编程的技巧,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、以良好的方式编写C++ class假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。Header(头文件...
    99+
    2023-06-15
  • C++超详细梳理lambda和function的使用方法
    目录lambda表达式谈谈lambda的捕获万能的functionbind操作lambda表达式 lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式...
    99+
    2022-11-13
    C++ lambda C++ function
  • C语言中的编码小技巧
    目录C语言编码小技巧1. 退出程序2. 注释(相当于“删除”)一段代码3.  数据溢出问题4. 增加程序的可读性5. Oj 1062 避免读取无关 ...
    99+
    2023-02-06
    C语言编码 编码小技巧 C语言编码技巧
  • C#中Lambda表达式的三种写法
    一、历史版本 delegate void StudentDelegate(string name, int age); public class LambdaTest { p...
    99+
    2024-04-02
  • 解析C语言中指针的作用和技巧
    C语言指针解析:指针的作用和使用技巧 引言:在C语言中,指针是一种非常重要的概念和特性。它使得程序能够动态地管理内存和数据,提高了程序的灵活性和效率。本文将深入探讨指针的作用和使用技巧...
    99+
    2024-02-26
    技巧 指针 作用
  • C#中常见的性能调优和代码重构技巧及解决方法
    C#中常见的性能调优和代码重构技巧及解决方法引言:在软件开发过程中,性能优化和代码重构是不可忽视的重要环节。特别是在使用C#开发大型应用程序时,优化和重构代码可以提升应用程序的性能和可维护性。本文将介绍一些常见的C#性能调优和代码重构技巧,...
    99+
    2023-10-22
    优化算法 并行 性能调优:缓存 代码重构:提取方法 减少重复
  • C++语法和设计模式的性能优化技巧
    在 c++++ 开发中,通过优化语法和设计模式,可以提升代码效率:1. 避免不必要的拷贝和移动;2. 使用内联函数;3. 应用智能指针;4. 利用设计模式(如单例、工厂方法和观察者)。 ...
    99+
    2024-05-13
    c++ 设计模式
  • C++中的Lambda函数详解
    目录一 函数语法二 函数应用1、在普通函数中使用2、在qt信号槽中使用3、在std::sort排序函数中的使用三 总结一 函数语法 我们平时调用函数的时候,都是需要被调用函数的函数名...
    99+
    2024-04-02
  • C++中Lambda表达式的语法与实例
    目录概述 语法分析 捕获列表 关键字声明 mutableexception示例 捕获列表按值传递捕获列表按引用传递总结概述 C++ 11 中的 Lambda 表达式用于定义并创建匿...
    99+
    2024-04-02
  • C++ 中内存泄漏的调试技巧
    c++++ 中内存泄漏调试技巧包括:使用调试器(visual studio 或 gdb)设置断点和检查变量。使用 valgrind 等内存调试器分析内存使用情况并检测泄漏。手动管理内存分...
    99+
    2024-05-04
    c++ 内存泄漏 linux
  • C++技术中的机器学习:使用C++实现机器学习算法的调试技巧
    c++++ 中机器学习算法的调试技巧:使用断点和调试器进行精确错误识别และตรวจสอบสถานะของตัวแปร使用日志记录和跟踪记录关键变量和事件以了解算法行为利用 valgri...
    99+
    2024-05-11
    机器学习 c++
  • Python中lambda函数技巧的快速学习
    快速学习Python中lambda函数的应用技巧,需要具体代码示例 在Python编程语言中,lambda函数是一种基于表达式的匿名函数,可以简化编码过程,提高代码的可读性和可维护性。本文将介绍lambda函数的基本用法,并通过...
    99+
    2024-02-03
    应用技巧 lambda函数 python学习
  • C#中Abstract方法和Virtual方法的区别
    简介: c#中Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用。virtual可以被子类重写,而abstract必须被子类重写。virtua...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作