左值和右值

简介: 左值和右值

1.左值和右值

i = i + 1;

所以一个左值可能同时具有做左值和右值的属性,但是不可能是同时是左值或者右值,只能说具有这种属性

2.左值引用和右值引用

左值引用

const & a = 1;

等价于

int b = 1; //可以把b看作一个临时变量

const &c = b;

右值引用是&&,一般用在即将销毁的/临时对象上

例如int && a = 3;

----左值和右值表达式

++i是左值表达式

i++是右值表达式

----右值绑定

所有的变量都要堪称左值,因为他们是有地址的,而且用右值绑定也绑定不上

任何函数里面的形参都是左值,就算是void f(int &&w)这种写法,这里形参w的类型是右值引用(需要绑定到右值),但w本身是左值

临时对象都是右值

----为什么要用右值

为啥用右值呢,它是C++11新加的,可以把它看作一个新的数据类型,主要目的是为了提高效率,怎么实现呢,就是把复制对象变成移动对象,比如之前对象A给对象B的话,是先给B开内存,然后再把A的每个成员赋值给B,这种非常慢,而移动对象是把A的内存块直接给B,然后A去释放,就这样就完事了,之前复制对象的话,有拷贝构造函数,拷贝复制运算符,而移动对象有,移动构造函数和移动复制运算符,只不过前面两个是&,后面两个是&&

3.std::move函数

因为move太容易重名了,所以使用时候都带上std::move,不管写没写using namspace std;

string def = std::move(st)是触发了string类的移动构造函数,而对于string && def = std::move(st)并没有触发string类的移动构造函数

4.隐式类型转换

CTempValue sum;
sum = 1000;
CTempValue sum = 100
后者比前者少调用了一次构造函数,一次拷贝赋值运算符,少调用了一次析构函数
后者的=不是赋值运算符,而是“定义时初始化”的概念,这个代码的过程是,在这里定义了sum对象--
--系统为sum对象创建了预留空间,然后用1000调用构造函数来构造临时对象,但是这个构造是在预留空间里进行的,所以并没有真正的产生临时对象

C++只会为const引用(const string& aaa)产生临时对象,而不会为非const引用string& aaa产生临时对象

void test(const string& aaa)

临时对象就是一种右值

相关文章
|
网络架构 Docker 容器
Docker容器动态添加端口
Docker容器动态添加端口
476 0
|
存储 数据采集 Prometheus
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
2273 0
【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)(一)
|
并行计算 Linux Go
export GOMP_CPU_AFFINITY=0-(((npro
export GOMP_CPU_AFFINITY=0-(((nproc --all) - 1 )) 是一条 Linux 命令,用于设置 GOMP(Go 语言的 OpenMP 支持库)使用的 CPU 亲和性。
608 1
|
存储 安全 Java
ConcurrentLinkedQueue详解
通过本文的介绍,希望您能够深入理解 `ConcurrentLinkedQueue`的工作原理、主要特性、常用方法以及实际应用,并在实际开发中灵活运用这些知识,编写出高效、健壮的并发程序。
312 3
|
存储 数据挖掘
YUV色彩空间
本文介绍 YUV存储格式,什么是色调?什么是色饱和度?人类视觉系统是如何感知YUV的?YUV比RGB好在哪里
540 0
|
机器学习/深度学习 自然语言处理 机器人
基于深度学习的智能语音机器人交互系统设计方案
**摘要** 本项目旨在设计和实现一套基于深度学习的智能语音机器人交互系统,该系统能够准确识别和理解用户的语音指令,提供快速响应,并注重安全性和用户友好性。系统采用分层架构,包括用户层、应用层、服务层和数据层,涉及语音识别、自然语言处理和语音合成等关键技术。深度学习模型,如RNN和LSTM,用于提升识别准确率,微服务架构和云计算技术确保系统的高效性和可扩展性。系统流程涵盖用户注册、语音数据采集、识别、处理和反馈。预期效果是高识别准确率、高效处理和良好的用户体验。未来计划包括系统性能优化和更多应用场景的探索,目标是打造一个适用于智能家居、医疗健康、教育培训等多个领域的智能语音交互解决方案。
|
Kubernetes 调度 容器
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,其中Sidecarless模式如Istio Ambient、ACMG和Kmesh等,可减少延迟和资源消耗。Kmesh基于eBPF技术,通过内核空间拦截流量,结合Waypoint Proxy处理L7流量,实现高效的服务治理。本文介绍了如何在阿里云ACK集群中部署Kmesh并连接ASM控制面,包括安装步骤、检查服务状态和流量调度示例。
327 0
|
机器学习/深度学习 人工智能 自动驾驶
强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践
强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践
1037 0
强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践
NSS [NISACTF 2022]babyupload
NSS [NISACTF 2022]babyupload
166 0
|
缓存 算法 小程序
游戏开发学习路线和教程合集
游戏开发学习路线和教程合集
675 0