vim 多行合并一行 您所在的位置:网站首页 多行合并成一行内容不变快捷键怎么设置 vim 多行合并一行

vim 多行合并一行

2024-06-30 07:37| 来源: 网络整理| 查看: 265

make_shared理解

CodesFox: 再补充一下,为什么使用make_shared时,明明make_shared创建shared_ptr对象也会产生一次指针引用,最终整个语句过程却一共只产生了一次指针引用:因为make_shared是函数,函数返回值被归为右值,因此此时shared_ptr将调用移动构造函数(或移动赋值函数),直接从make_shared的返回对象将所有东西“夺取”成为自己的东西,而不是从返回对象“复制”到自身,也就不会再产生一次新的指针引用了,自始至终就只有make_shared在创建shared_ptr对象时产生了一次新的指针引用。

make_shared理解

CodesFox: 这里补充解释一下return shared_ptr(_Sp_make_shared_tag(), __a, std::forward(__args)...);这里,明明__args定义时是_Args&&模版类型,具有引用折叠的机制,还要“多此一举”地使用std::forward()转发: std::forward()主要是为了应对这样的情况: 例如__args中有一个参数项解析得到是&&右值引用类型,这里姑且叫做arg,这个时候如果直接将这个arg作为参数传给shared_ptr的构造函数时会产生报错的,因为arg类型上是&&右值引用,因此很自然的应该调用对应位置接受右值传参的函数重载,但就是此时会发生错误:函数拒绝接受参数arg,因为它虽然类型是&&右值引用,但它的属性是“左值”,而&&传参只接受右值属性。 到这里就容易让人困惑了,arg明明已经是&&右值引用类型了,属性上是左值又是什么鬼?——其实也不难理解,从过程上看,arg实际上是被赋值的,相当于它就是在“=”左边,那它就是左值,没毛病对吧? 所以这个时候怎么办呢?类型已经是&&右值引用了,却因为属性是左值而没办法作为右值传参,这不废了?这个时候就是std::forward()派上用场的时候了,这个函数的存在意义,可以理解为:对类型为&&右值引用的变量,将其属性同步为右值属性以满足传参的需要,这个时候share_ptr构造函数的对应重载就能顺利接受arg这个右值引用参数了,这也就是所谓的“转发”机制了。

make_shared理解

ada0_ada1: 话说如果要看stl源码需要先看啥会比较好理解这些源码表情包

dvwa登录失败-login failed

H丶十一: 这么高的访问量这么简短的回复以为是扯淡,原来小丑是我自己表情包,用户名密码还真是admin,password .....

dvwa登录失败-login failed

奈斯兔咪呦: 我也总是登陆失败 什么原因啊



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有