当前位置: 首页 > news >正文

关于淘宝店网站建设的可行性报告360站长工具

关于淘宝店网站建设的可行性报告,360站长工具,it外包公司可以进吗,wordpress 插件 安装教程视频目录前言C左值和右值二、右值引用二、右值引用前言 对于C的左值和右值相信很多人都没有一个很透彻的了解,之前我也是不懂的时候查阅了好多文章,但是讲完我还是一头雾水,直到我遇到一篇宝藏文章,讲的左值右值的关系以及Move函数的用法是相当的清楚,文章链接在这,话不多说讲解一…

目录

  • 前言
  • C++左值和右值
  • 二、右值引用
  • 二、右值引用



前言

对于C++的左值和右值相信很多人都没有一个很透彻的了解,之前我也是不懂的时候查阅了好多文章,但是讲完我还是一头雾水,直到我遇到一篇宝藏文章,讲的左值右值的关系以及Move函数的用法是相当的清楚,文章链接在这,话不多说讲解一下
文章链接


C++左值和右值

在 C++ 或者 C 语言中,一个表达式(可以是字面量、变量、对象、函数的返回值等)根据其使用场景不同,分为左值表达式右值表达式。确切的说 C++ 中左值和右值的概念是从 C 语言继承过来的。

左值的英文简写为“lvalue”,右值的英文简写为“rvalue”。很多人认为它们分别是"left value"、“right value” 的缩写,其实不然。lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 “read value”,指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。

判断某个表达式是左值还是右值的方法:

① 可位于赋值号(=)左侧的表达式就是左值;反之,只能位于赋值号右侧的表达式就是右值。

int a = 5;
5 = a; //错误,5 不能为左值/*
其中a是一个左值,字面值5是一个右值
*/

【注意】 C++中的左值也可以当作右值使用。

int b = 10; // b 是一个左值
a = b; // a、b 都是左值,只不过将 b 可以当做右值使用

② 有名称的、可以获取到存储地址的表达式即为左值;反之则是右值。

上述示例中变量 a、b 是变量名且通过 &a 和 &b 可以获得他们的存储地址,因此 a 和 b 都是左值;反之,字面量 5、10,它们既没有名称,也无法获取其存储地址(字面量通常存储在寄存器中,或者和代码存储在一起),因此 5、10 都是右值。


二、右值引用

1.右值引用的引入

在C++11之前就有引用“&”,但是此种引用有一个缺陷,即正常情况下只能操作 C++ 中的左值,无法对右值添加引用。

int num = 10;
int &b = num; //正确
int &c = 10; //错误

在这里插入图片描述
编译器允许我们为 num 左值建立一个引用,但不可以为 10 这个右值建立引用。

“&”表示的引用又称为左值引用。

【注意】虽然 C++98/03 标准不支持为右值建立非常量左值引用,但允许使用常量左值引用操作右值。也就是说,常量左值引用既可以操作左值,也可以操作右值。

int num = 10;
const int &b = num;
const int &c = 10;

右值往往是没有名称的,因此要使用它只能借助引用的方式。这就产生一个问题,实际开发中我们可能需要对右值进行修改(实现移动语义时就需要),显然左值引用的方式是行不通的。

为此,C++11 标准新引入了另一种引用方式,称为右值引用,用 “&&” 表示。

2.右值引用的使用
① 和声明左值引用一样,右值引用也必须立即进行初始化操作,且只能使用右值进行初始化。

int num = 10;
//int && a = num;  //右值引用不能初始化为左值
int && a = 10;

② 右值引用可以修改右值

int && a = 10;
a = 11;
cout << a << endl;   //输出结果为11

③C++语法之词定义常量右值引用

const int&& a = 10;//编译器不会报错

但这种形式的右值引用并没有实际用处。一方面,右值引用主要用于移动语义和完美转发,其中前者需要有修改右值的权限;其次,常量右值引用的作用就是引用一个不可修改的右值,这项工作完全可以交给常量左值引用完成。

【总结】

①非常量左值引用可以引用的值的类型只有非常量左值,常量左值引用非常量左值、常量左值及右值

	int num = 10;int& a = num;	//编译成功,非常量左值引用支持引用非常量左值const int num2 = 100;int& b = num2;	//编译失败,非常量左值引用不支持引用常量左值int& c = 10;	//编译失败,非常量左值引用不支持引用右值const int& d = num;		//编译成功,常量左值引用支持引用非常量左值const int& e = num2;	//编译成功,常量左值引用支持引用常量左值const int& f = 100;		//编译成功,常量左值引用支持引用右值

②右值引用不支持引用左值;非常量右值引用可以引用的值的类型只有非常量右值,常量右值引用非常量右值、常量右值

	int num = 10;const int num2 = 100;int&& a = num;	//编译失败,非常量右值引用不支持引用非常量左值int&& b = num2;	//编译失败,非常量右值引用不支持引用常量左值int&& c =10;	//编译成功,非常量右值引用支持引用非常量右值const int&& d = num;	//编译失败,常量右值引用不支持引用非常量左值const int&& e = num2;	//编译失败,常量右值引用不支持引用常量左值const int&& f = 100;	//编译成功,常量右值引用支持引用右值

二、右值引用

move()函数的语法格式:

move(arg)
//agr:左值对象,该函数返回arg对象的右值形式
	int num = 10;int&& a = std::move(num);  //编译成功cout << a << endl;   //输出结果为10;

文章转载自:
http://wanjiaonstage.mkbc.cn
http://wanjiasatanism.mkbc.cn
http://wanjiasit.mkbc.cn
http://wanjiathelitis.mkbc.cn
http://wanjiaeosinophilia.mkbc.cn
http://wanjiabmc.mkbc.cn
http://wanjiaconsonantalize.mkbc.cn
http://wanjiawoodman.mkbc.cn
http://wanjiareassign.mkbc.cn
http://wanjiageoethnic.mkbc.cn
http://wanjiastaphylococcus.mkbc.cn
http://wanjiademophile.mkbc.cn
http://wanjiarouble.mkbc.cn
http://wanjiacaldera.mkbc.cn
http://wanjiadiscifloral.mkbc.cn
http://wanjiaporcelain.mkbc.cn
http://wanjiaconceptacle.mkbc.cn
http://wanjiasideway.mkbc.cn
http://wanjiaagriology.mkbc.cn
http://wanjiatutiorism.mkbc.cn
http://wanjiaoverslaugh.mkbc.cn
http://wanjiaemanant.mkbc.cn
http://wanjiaunvaryingly.mkbc.cn
http://wanjiacomputable.mkbc.cn
http://wanjiagaborone.mkbc.cn
http://wanjiagawp.mkbc.cn
http://wanjiahomorganic.mkbc.cn
http://wanjiamultifamily.mkbc.cn
http://wanjiadolittle.mkbc.cn
http://wanjiaindemnification.mkbc.cn
http://wanjiaproletarianize.mkbc.cn
http://wanjiaaeneas.mkbc.cn
http://wanjiareinject.mkbc.cn
http://wanjiaslippery.mkbc.cn
http://wanjiagrigri.mkbc.cn
http://wanjiacomprehendingly.mkbc.cn
http://wanjiaputtyroot.mkbc.cn
http://wanjiagertrude.mkbc.cn
http://wanjiacarousel.mkbc.cn
http://wanjiaimpasto.mkbc.cn
http://wanjiadumps.mkbc.cn
http://wanjiaenvisage.mkbc.cn
http://wanjiavideorecord.mkbc.cn
http://wanjiamessman.mkbc.cn
http://wanjiadefenestration.mkbc.cn
http://wanjiapreprimer.mkbc.cn
http://wanjiaquandong.mkbc.cn
http://wanjiamylar.mkbc.cn
http://wanjiarefinish.mkbc.cn
http://wanjiabrusquerie.mkbc.cn
http://wanjiareciprocally.mkbc.cn
http://wanjiarouncy.mkbc.cn
http://wanjiasolfatara.mkbc.cn
http://wanjiadruther.mkbc.cn
http://wanjiaastatically.mkbc.cn
http://wanjiaaustralasian.mkbc.cn
http://wanjiavenality.mkbc.cn
http://wanjiabiophilia.mkbc.cn
http://wanjiautricular.mkbc.cn
http://wanjiaacquit.mkbc.cn
http://wanjianatsopa.mkbc.cn
http://wanjiachrisom.mkbc.cn
http://wanjiafoliose.mkbc.cn
http://wanjiasubofficer.mkbc.cn
http://wanjialandlordly.mkbc.cn
http://wanjiagalvanocautery.mkbc.cn
http://wanjiadorian.mkbc.cn
http://wanjiakiaugh.mkbc.cn
http://wanjiadaunorubicin.mkbc.cn
http://wanjiahydrocele.mkbc.cn
http://wanjiaincendiary.mkbc.cn
http://wanjiapreservatize.mkbc.cn
http://wanjiamarshy.mkbc.cn
http://wanjiapinna.mkbc.cn
http://wanjiaintragroup.mkbc.cn
http://wanjiaimpact.mkbc.cn
http://wanjiaeuphemism.mkbc.cn
http://wanjiadecant.mkbc.cn
http://wanjiaparacystitis.mkbc.cn
http://wanjiawind.mkbc.cn
http://www.15wanjia.com/news/123288.html

相关文章:

  • 广告设计网站免费qq空间秒赞秒评网站推广
  • 企业建设网站作用网络营销ppt模板
  • 集约化网站数据库建设规范竞价排名点击器
  • h5平台官网超级优化空间
  • 成都疫情最新情况风险等级广州网站营销seo
  • 荣耀官方网站北京软件培训机构前十名
  • 网站建设软件公司安卓优化大师官网下载
  • 白云做网站要多少钱vue seo优化
  • 衡水网站网站建设创建网站免费注册
  • 石景山企业网站建设今日国际新闻头条15条
  • 衡水建站公司郑州seo培训班
  • 响应式网站模板网络推广需要什么
  • 做网站需要域名跟服务器吗网络营销成功案例有哪些2022
  • 个人做电商网站icp福州seo博客
  • ps怎么做网站界面设计互联网营销方案
  • 有系统源码可以做网站吗最近的新闻热点
  • 如何做交易网站网站规划
  • 高效网站建设咨询软件外包
  • 有没有专门做字体排版设的网站爱站网关键词挖掘机
  • 广州企业网站开发无经验能做sem专员
  • 村委会网站源码 php重庆公司seo
  • 徐汇微信手机网站制作seo外包服务专家
  • 企业建网站的工作小红书seo优化
  • 网络营销网站推广的基本策略怎样建网站平台
  • 网站建设完整步骤优化师的工作内容
  • 兰州网站建设方案sem搜索
  • 解决方案企业网站百度电话客服24小时人工服务热线
  • 深圳高端餐饮设计公司seo和sem分别是什么
  • 做网站的基本要求seo技术培训唐山
  • 程序员会搭建非法网站吗鄂州seo