左值和右值

简介: 左值和右值

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)

临时对象就是一种右值

相关文章
|
机器学习/深度学习 算法 决策智能
选址问题-精确重心法和遗传算法
选址问题-精确重心法和遗传算法
3074 0
|
10月前
|
Java Maven 数据安全/隐私保护
06-nexus私仓环境搭建
本文详细介绍Nexus Repository Manager OSS的安装与配置,涵盖JDK环境准备、服务部署、用户创建及启动操作。指导用户搭建Maven和Docker私有仓库,实现jar包与镜像的上传下载,并配置匿名访问与本地客户端信任。支持多种仓库类型,适用于企业级制品管理。
552 0
|
9月前
|
数据采集 机器学习/深度学习 人工智能
大模型应用:大模型性能评估指标:CLUE任务与数据集详解.10
CLUE(中文语言理解评估基准)是专为中文大模型设计的综合性评测体系,涵盖文本分类、自然语言推理、命名实体识别、阅读理解等任务,提供准确率、F1值、精确匹配等多维指标,并支持模块化评估与可视化分析,助力客观、全面衡量模型真实能力。(239字)
935 6
|
8月前
|
存储 编解码 安全
阿里云服务器4核16G配置可选实例规格,收费标准与活动价格和选购参考
阿里云服务器4核16G配置提供经济型e、通用算力型u2a及通用型g9i等多种实例规格,涵盖从轻量级到企业级核心应用的全场景需求。经济型e实例适合轻负载场景,如个人博客、小型网站,性价比高;通用算力型u2a实例提供企业级独享性能,适用于中小型数据库、数据分析,成本与性能平衡;通用型g9i实例则凭借CIPU架构与至强6处理器,为高要求场景如游戏服务器、金融量化提供极致稳定算力。用户可根据业务需求、性能要求及预算选择,并利用活动优惠与优惠券降低购买成本。
901 1
|
8月前
|
BI 数据安全/隐私保护 开发者
Quick BI使用案例11:基于钉钉组织架构,按角色精准同步“店长”账号至 Quick BI
本案例针对连锁足疗品牌Quick BI账号泛滥问题,提供钉钉组织同步精准管控方案:通过钉钉开发者后台配置应用“可见范围”,仅同步店长等必要角色,避免席位浪费与权限混乱,提升管理效率。(239字)
|
11月前
|
云安全 弹性计算 Cloud Native
阿里云DDoS原生防护2.0(后付费)668元一年,开通后用满30天才能退订
阿里云DDoS原生防护2.0(后付费)企业版,支持无忧防护模式,按天计费,国际区668元/天起,中国内地1540元/天起。开通满30天可退订,提供Tbps级防护,兼容IPv4/IPv6,覆盖ECS、SLB、EIP等多类资产,详情见官方页面。
956 1
|
人工智能 运维 监控
运维还能“自愈”?聊聊AI加持下的运维进化
运维还能“自愈”?聊聊AI加持下的运维进化
583 1
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
880 83
|
存储 人工智能 自然语言处理
《深度揭秘LDA:开启人工智能降维与分类优化的大门》
线性判别分析(LDA)是一种强大的监督学习降维方法,旨在通过最大化类间距离、最小化类内距离,将高维数据投影到低维空间,从而提升分类性能。LDA通过计算类内和类间散布矩阵,找到最优的投影方向,有效增强类别可分性,并过滤噪声与冗余信息。它在计算机视觉、自然语言处理及生物医学等领域有着广泛应用,显著提高了图像识别、文本分类和基因数据分析等任务的准确性和效率。
744 3
|
机器学习/深度学习 人工智能 运维
AI 实时流量分析:运维老司机的“天眼”系统
AI 实时流量分析:运维老司机的“天眼”系统
698 14

热门文章

最新文章