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

C++中的Lambda表达式及表达式语句

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

C++中的Lambda表达式及表达式语句

一、概念

定义:表达式由一到多个操作数组成,可以求值并通常会返回求值结果;

最基本表达式:变量、字面值,通常包含操作符;

操作符特性:

  • 1、接收几个操作数:一元、二元、三元;
  • 2、对类型有要求(可能涉及类型转换);
  • 3、操作数是左值还是右值;
  • 4、结果的类型;
  • 5、结果是左值还是右值;
  • 6、优先级与结合性,可用小括号来改变运算顺序;
  • 7、 操作符重载:不改变接收操作数的个数、优先级与结合性;

注意:关于操作符优先级问题可以参考文档

二、左值与右值

参考网站

在C语言中:左值可能放在等号左边,右值只能放在等号右边;

在C++中,左值也不一定能放在等号左边,右值也可能放在等号左边;

值类型关系图:

  • glvalue:泛左值,标识一个对象、位或函数;
  • pvalue:纯右值,用于初始化对象或作为操作数;
  • xvalue:亡值,表示其资源可以被重新使用;

C++是支持左值和右值的转换的;

decltype可以接收表达式,并且根据类型不同产生不同的值:

参考文章:decltype 说明符

  • 表达式的值类别为纯右值,则为type
  • 表达式的值类别为纯左值,则为type&
  • 表达式的值类别为亡值,则为type&&

三、类型转换

定义:一些操作符要求其操作数具有特定的类型,或者具有相同的类型,此时可能产生类型转换;

隐式类型转换:编译器自动发生的;

显式类型转换:

  • 1、static_cast<新类型> (表达式);
  • 2、const_cast<新类型> (表达式):去除常量性或增加常量性;
  • 3、显示引入的转换;

四、操作符

  • 算数运算符中,除逻辑非外,其它操作符都是左结合的;
  • 逻辑与、逻辑或具有短路特性;
  • 逻辑与&&优先级高于逻辑或||;
  • 按位取反符:~ 按位与:& 按位或:| 按位异或:^ 移位操作符:<<、>>
  • 移位操作在一定程度上是乘以或除以2的幂,但速度更快;
  • 赋值操作符是右结合的;
  • 还有一些其他操作符,比如成员访问操作符.和->,条件操作符?:等,在这就不做介绍了;

五、思考

1、思考下面x变量是左值还是右值,有什么特性?


const int x = 3;
​ 

x是一个纯左值,由于系统内部为常量,所以不能放在等号左边;

2、思考一下以下赋值操作符的原始代码是怎样的?


int x;
int y;
x = y = 5;

首先赋值操作符是右结合的,先计算y=3,并且不是把y的值赋予给x,而是这个表达式的返回值赋予x,原始代码如下:


x = (y = 3);

可以通过https://cppinsights.io/这个网站,看出C++内部对一些代码的转换处理;

3、思考以下代码做了什么事情?


int x = 2;
int y = 3;
x^=y^=x^=y;

答案就是通过复合赋值操作,交换了x和y的值,详细也和异或这个操作符有关;

总结:
​ 表达式这个概念在C++中属于比较细节的知识了,很多时候我们只用知道怎么用,对于编译器内部怎么处理我们并不关心;并且关于左值和右值这个概念,也是C++比较深的一个小知识点,了解后对于程序的优化是有很大帮助的,本篇重点需要关注左值和右值,多参考官方cppreferenc的文档,这是最权威的说明文档;

到此这篇关于C++中的Lambda表达式及表达式语句的文章就介绍到这了,更多相关C++ Lambda表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

C++中的Lambda表达式及表达式语句

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

下载Word文档

猜你喜欢

C#3.0中Lambda表达式详解

在C#3.0中,微软给我带来的一些新特性可能是以前所有开发语言都没有的特性。这无疑大大的体现了C#3.0在开发语言中强大的优势
2022-11-15

Python的lambda表达式

匿名表达式---lambda介绍匿名函数- 也是就lambda表达式。介绍几个 序列处理的函数,比如序列过滤、把所有元素都拿过来做某些操作,这种的序列处理函数。这样的函数都有一些特点,会借用别函数来进行操作。这里就会用到lambda ▷匿名
2023-01-31

C# Lambda表达式怎么用

这篇文章主要为大家展示了“C# Lambda表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C# Lambda表达式怎么用”这篇文章吧。C#语言还是比较常见的东西,这里我们主要介绍C#
2023-06-17

Python中表达式与语句

简述Python中我暂时并未发现谁对着两个名词的明确定义;我对这两个名词的理解就是,表达式就是你想要执行的对象,语句就是你的具体执行操作。这里应用慕课网老师的一段话,摘自网上"表达式(Expression)是运算符(operator)和操作
2023-01-30

如何在C#项目中创建一个Lambda表达式和Lambda表达式树

如何在C#项目中创建一个Lambda表达式和Lambda表达式树?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、表达式Lambda  表达式位于 => 运算符右侧的 la
2023-06-06

C#中如何使用Lambda表达式

本篇文章为大家展示了C#中如何使用Lambda表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C# Lambda表达式我们从“所有字符串查找包含YJingLee子字符串”说起。在C# 2.0中,
2023-06-17

C#中Lambda表达式如何使用

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

C++ 中如何使用lambda表达式?

lambda 表达式是 c++++ 中的匿名函数,用于创建一次性的函数。它们通过捕获列表访问外部作用域变量,并可以接收参数和定义返回类型。lambda 表达式通常用于快速创建或在运行时传递函数。它们可以访问 lvalue 和 rvalue,
C++ 中如何使用lambda表达式?
2024-04-12

C#中的Lambda表达式怎么优化

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

编程热搜

  • 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动态编译

目录