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

如何申请网站空间和域名游戏优化大师官方下载

如何申请网站空间和域名,游戏优化大师官方下载,找公司做网站先付全款吗,浙江网站开发公司文章目录 1. 统一的列表初始化{ } 初始化initializer_list 2. 引用左值引用右值引用左值引用与右值引用的相互转换右值引用的真正使用场景移动构造 C98与C11传值返回问题注意事项总结 3. 完美转发 1. 统一的列表初始化 { } 初始化 C11 扩大了括号括起的列表(初始化列表)的使用…

文章目录

    • 1. 统一的列表初始化
      • { } 初始化
      • initializer_list
    • 2. 引用
      • 左值引用
      • 右值引用
      • 左值引用与右值引用的相互转换
      • 右值引用的真正使用场景
        • 移动构造
      • C++98与C++11传值返回问题
      • 注意事项
      • 总结
    • 3. 完美转发

1. 统一的列表初始化

{ } 初始化

C++11 扩大了括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义类型,
使用初始化列表,可添加等号(=),也可不添加

将1赋值给x1,x2处省略了赋值符号,将5赋值给x2
同样也可以将new开辟4个int的空间初始化为0


创建对象时,可以使用列表初始化方式调用构造函数初始化,也可省略等号

initializer_list

花括号里面的常量数组,C++可以将其识别成一个类型 initializer_list,
initializer_list这个类带有模板参数,因为传过来的int数据,所以为 initializer_list


类中存在两个指针
size作为两个指针相减
begin指向开始的位置,end 指向结束位置的下一个


对数据不能修改,说明指向的内容在常量区
任意的常量数组 都可以赋值给 initializer_list的对象


在这里插入图片描述

C++11中 的vector,是 通过新增的构造函数的方式 使用 initializer_list 进行初始化

2. 引用

左值引用

左值引用就是给左值取别名
左值是一个数据的表达式(如变量名或者引用指针)
可以获取它的地址 即为左值


左值出现赋值符号的左边 (也可出现在右边)


右值引用

右值也是一个表示数据的表达式(如字面常量、表达式返回值、函数返回值)
右值可以出现在赋值符号的右边,但不能出现赋值符号的左边,右值不能取地址

右值引用 就是 给右值起别名


左值引用与右值引用的相互转换

x+y 作为右值 ,左值引用是无法直接引用右值的
但可以通过隐式类型转换的方式,由于 临时变量具有常性, 加入 const 即可


a作为左值, 右值引用是无法直接引用左值, 使用move 后,其返回值作为右值

右值引用的真正使用场景

虽然可以在左值中加入const ,既可以使用左值 ,又可以使用右值
但是 无法区分到底是左值还是右值的


加入右值引用后,传参过程中,更好的进行参数匹配
就可以 区分 是调用 左值引用 还是 右值引用


移动构造

右值分为两种
1.纯右值(内置类型)
2.将亡值(自定义类型)


s1作为左值,调用拷贝构造
s1+s2 作为表达式返回值,代表右值 即 将亡值


若右值进行深拷贝,(再创建一块空间在原有的数据拷贝过来,然后释放原有空间),
将亡值 是没有必要拷贝,代价太大了


在这里插入图片描述
由于有const,所以无论是左值还是右值都可以传过来作为参数


将右值(将亡值) 的资源进行转移ret2
使用右值引用 区分出右值后,就没有必要进行深拷贝了 ,
接收右值 作为参数 的拷贝 称为 移动拷贝


在这里插入图片描述
调用移动构造,进行移动拷贝


在这里插入图片描述
右值就不再调用深拷贝,而是使用移动拷贝

C++98与C++11传值返回问题

在这里插入图片描述
对于传值返回,C++98 刚开始会进行两次拷贝构造,
编译器优化后,会进行一次拷贝构造


在这里插入图片描述

编译器不优化时
str作为临时变量 属于左值, 将str传给 临时变量 ,属于拷贝构造
临时对象 是看不见摸不着的 无法知道它的地址 ,所以属于 右值 (将亡值) ,
所以将右值传给 str ,属于 移动构造

编译器优化时
编译器会想办法将 函数中的临时变量 str 识别成 右值(使用move其函数返回值为右值),进行移动构造 (资源转移)


在这里插入图片描述
s2 进行深拷贝 ,将s1的数据拷贝到新开辟的空间中
move(s1)后,表达式返回值作为右值
s3 进行移动拷贝,把s1的资源转移到s3中,所以导致s1为空

注意事项

右值是不可以取地址的,但是给右值取别名后,会导致右值存储到特定位置,并且可以取到该位置地址
如:不能取到字面常量10的地址,但是ret引用后,可以对ret取地址,也可以修改ret,如果像ret不能修改,需要加入const 即 const int &&

总结

左值引用减少拷贝,提高效率
右值引用也是减少拷贝,提高效率
但角度不同,
左值引用是直接减少拷贝
右值引用是间接减少拷贝,识别出是左值还是右值,若识别出是右值,则不再深拷贝,
直接移动拷贝(资源转移),提高效率

3. 完美转发

写一个函数 ,无论传过来的参数为左值还是右值,都可以接受 (将左值move后,返回值为右值)

当左值作为参数 时, 会发生引用折叠,调用 fun(t),此时t作为左值,所以会输出 左值引用


当右值作为参数时,实际上右值接收后,要进行移动拷贝,右值引用 引用后属性会变成左值,否则无法进行资源转移


调用push_back ,参数为右值,右值引用 引用后属性会变成左值,但是 变为左值为了进行 资源转移的 ,
还没等进行转移, 在这期间先调用 insert ,(x作为左值),调用左值引用的insert 就会导致 进行深拷贝,而不是进行移动拷贝


C++支持 完美转发 ,用于保持原有的属性,避免 参数x在资源转移之前 转过早的情况


所以当此时fun 参数 加入forward 完美转发后,使右值 引用后,并没有立即变为左值,而是保持原有的属性 右值
所以 调用 对应的fun 打印 右值引用

http://www.khdw.cn/news/57999.html

相关文章:

  • 做网站婚介简历怎么写如何创建网站教程
  • 做微信公众号微网站吗广告投放渠道有哪些
  • wordpress文件调用函数萌新seo
  • 做app的模板下载网站免费推广平台
  • 公司做网站域名归谁免费宣传平台
  • 国外购物平台网页界面设计杭州seo排名优化外包
  • 宁波做网站优化百度写一篇文章多少钱
  • 网站设计背景怎么写seo引擎优化怎么做
  • 网站建设捌金手指花总五网站建设开发外包公司
  • 秒速网站建设竞价托管资讯
  • 做网站电话南通网络推广
  • 网站怎样维护西安网络推广
  • 网站建设图书推荐友情链接qq群
  • 莞城区网站仿做如何制作一个属于自己的网站
  • 清丰网站建设费用百度自己的宣传广告
  • 网站点击弹出下载框 怎么做的公司网站推广费用
  • 做网站论坛最有效的15个营销方法
  • 网站变灰兼容代码百度竞价开户多少钱
  • wordpress+一页一屏seo搜索优化是什么呢
  • app制作平台要多少钱常德网站seo
  • 0经验自己做网站品牌策划ppt案例
  • 已有网站域名 怎么做网站游戏推广是什么工作
  • 阿里巴巴网站维护要怎么做零基础学电脑培训班
  • 网站开发一般要用到哪些软件十大经典事件营销案例
  • 杨浦集团网站建设引流软件有哪些
  • 温州网站建设模板外链怎么做
  • app购物网站建设黑马培训价目表
  • 软件公司都是帮别人做网站么3322免费域名注册
  • wordpress可以做电商吗一个网站可以优化多少关键词
  • wordpress同步发帖广州做seo的公司