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

云服务器小网站制作视频号视频怎么看下载链接

云服务器小网站制作,视频号视频怎么看下载链接,怎么做自己的充值网站,菏泽公司做网站左值和右值 左值是实际上存储在内存中的数据,可以对其取地址,比如变量;而右值是临时储存在寄存器中,或者并不长期存储在内存中的数据(一般用来给变量赋值),不可以取地址,比如函数返回…

左值和右值

  • 左值是实际上存储在内存中的数据,可以对其取地址,比如变量;而右值是临时储存在寄存器中,或者并不长期存储在内存中的数据(一般用来给变量赋值),不可以取地址,比如函数返回值。区别左值和右值的标准就是是否可以取地址。
  • 在编程过程中,像这样一个表达式:char*p="abcd";在这个赋值的过程中有两个abcd,一个是赋值之前程序放在寄存器里的字符串,它用来给p指向的空间赋值,它是右值。一个是赋值后p指向的内存空间里的字符串,它是左值。单纯论程序员写的这个表达式中的abcd是什么值,那肯定是右值,因为这是用来赋值的需要放在寄存器里的那个。通过这个深刻理解了,左值和右值的区分就是依据是否有固定可取的地址。
  • 左值不一定在左边(int a=b),右值一定在右边
  • 左值和右值都是表示数据的表达式,即他们不单单是一个变量名,或者一个常量,左值和右值也可以是解引用的指针(*p),右值也可以是函数调用(fun(),func有返回值),右值也可以是一个计算表达式(3+5,右值才有)。

左值引用和右值引用

  • 左值引用就是给左值取别名(&),右值引用就是给右值取别名(&&)
int a = 5;
int& x = a;//左值引用
int&& y = 5;//右值引用
  • 右值引用可以延长右值的生命周期,比如将函数返回值用右值引用引用起来,返回值就不会立即销毁,但是左值引用不可以延长左值的生命周期
  • 左值引用加const可以给右值取别名。右值引用也可以给左值取别名,但需要用move函数(int&& a= move(b))
  • 左值的引用也是左值。但是右值的引用却是左值,这是编译器给的特例,也叫退化。如果不给这个特例的话,那么右值匹配到移动构造后,参数也是右值,右值无法修改,资源也就无法交换了,移动构造无法实现了,右值引用也就失去了存在的意义。
  • 但是给了特例后也出现了一个问题:就是如果需要进去多层函数完成移动构造的话,右值传到第一个函数时就变成了左值,传这个左值的时候就不会匹配移动构造了。完美转发或者一路move下去直到交换资源的地方,解决了这个问题。
  • 实际上,底层上没有别名的概念,别名就是一个指针,给一块空间取别名就是用另一个指针指向这块空间。const,引用,右值不能引用左值,这些都是语法层的概念,实际上可以绕过编译器的检查,例如:int&&a = (int &&)b(move的原理实际上就是这个),利用类型转换引用左值。

引用与指针的区别

  • 有多级指针,但是没有多级引用(可以引用一个引用,但这不是多级引用,因为他们引用的是一个空间)
  • 没有NULL引用,但有NULL指针
  • 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  • 引用在定义时必须初始化,指针没有要求
  • 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  • 实际上在汇编层面,使用引用和使用指针指向空间时,汇编代码是一样样的。引用名就是隐含指针的名字。

返回值问题

  • 引用可以作为返回值,相当于返回指针,但比指针更简洁。
  • 如果返回值类型的不是引用,就生成一个拷贝被返回对象的临时对象,如果是引用,就相当于生成了一个指针

移动构造

  • 以右值引用为参数的拷贝构造函数就是移动构造函数,而通过移动构造函数构造对象的过程就叫做移动构造
  • 拷贝一个临时对象(右值)时自动匹配移动构造函数而不是普通拷贝构造函数,尽管普通拷贝构造函数也可以接受临时对象(加const)
  • 移动构造直接把临时对象的资源与新对象的资源交换,不发生拷贝,只发生一次交换
  • 右值引用支持了拷贝构造。
  • 一般来说,使用函数返回值构造新对象的过程是:局部对象--拷贝-->临时对象--拷贝-->新的对象

       编译器优化:局部对象--拷贝-->新的对象(省去临时对象,直接拷贝)

       移动构造优化:局部对象--交换-->新的对象(在编译器优化的情况下把仅剩一次的拷贝         变成资源交换,自此,整个过程没有拷贝)

       总的优化如下:

      

 万能引用

template<class T>

void func(T && arg){}

  • 这样的模板并不是代表匹配的都是右值,即如果传入左值,模板就实例化为左值引用的样子(T &arg),如果传入右值,模板就实例化为右值引用的样子(T &&arg),这就是万能引用。(也叫引用折叠
  • 单纯的万能引用是没用的,因为对于左值和右值,多重传递的时候需要有不同的逻辑(move或者不move),这时候就需要和完美转发配合,完美转发能统一处理这两种情况。
  • 由上可知,如果T是需要推导的类型,T&&就一定是万能引用而不可能是左值引用。如果T是需要推导的类型,T&就是代表形参只能接受左值。

 完美转发

forward<T>(arg);

在这个模版函数中,arg就是万能引用的形参,T是万能引用的模版参数类型,这个函数返回一个左值或者右值,如果arg是左值,返回左值,如果arg是右值退化后的左值,返回右值。

万能引用+完美转发的例子

void func2(int && c) 
{cout << c << endl;
}template<class T>
void func(T&& x)//万能引用
{func2(forward<T>(x));//完美转发
}int main() 
{func(5);
}

c++中引用折叠的规则

文章推荐

引用折叠、万能引用和完美转发那些事 - 殷大侠 - 博客园

http://www.dtcms.com/wzjs/137516.html

相关文章:

  • 广州网站制作费用展示型网站有哪些
  • 网络维护公司排名商丘seo
  • 陕西省城乡建设网站百度搜索排名与点击有关吗
  • 烟台网站建设招聘微信社群营销
  • 讷河做网站公司google官方版下载
  • 成都住房和城乡建设厅网站湖北最新消息
  • 网站商城建设套餐谷歌排名查询
  • 南昌做网站建设公司互联网营销师培训教程
  • 做优化网站是什么意思百度关键词搜索量查询
  • 出台网站集约化建设通知app推广方式有哪些
  • 软件开发前景2021seo优化报价公司
  • 网站建设衡水网络营销策略包括哪几大策略
  • 新余网站设计搜索引擎在线
  • 在越南做网站需要什么网络营销常用工具
  • wordpress 密码忘记武汉百度快照优化排名
  • 怎么查询自己房产信息百度免费优化
  • 如何做软件类型的网站企业网络营销推广
  • seo分析seo诊断深圳网络优化推广公司
  • 做网站合同封面成都做网络推广的公司有哪些
  • 青岛做网站免费推广网站2023
  • 哪个网站可以做会计试题广州市最新消息
  • 网站别人做的我自己怎么续费b站大全永不收费2023入口在哪
  • 网站建设 免费重庆发布的最新消息今天
  • 用php做网站需要什么软件山西seo推广
  • 网站建设发展方向及前景展望代运营网店公司
  • 珠海公司网站设计短信广告投放软件
  • wordpress 评论 html南昌seo网站管理
  • php网站后台模板下载不了专业seo推广
  • 费县网站建设大数据查询平台
  • 保险网站建设平台网络推广是什么工作