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

正能量网站地址污的中国建筑工程个人信息网

正能量网站地址污的,中国建筑工程个人信息网,wordpress比特币插件,小程序做一个要多少钱文章目录 前言一、右值引用是什么#xff1f;那么#xff0c;什么又是右值#xff1f;右值引用 二、使用步骤和意义1.1.11.2 2.右值引用的最大意义2.1 完美转发2.2 万能折叠 前言 C11 是2011年对C这门语言发布的新标准#xff0c;并且此次标准引入了十分多的新特性#x… 文章目录 前言一、右值引用是什么那么什么又是右值右值引用 二、使用步骤和意义1.1.11.2 2.右值引用的最大意义2.1 完美转发2.2 万能折叠 前言 C11 是2011年对C这门语言发布的新标准并且此次标准引入了十分多的新特性很大程度上优化且增加了C语言的实用性本章主要讲 C11 新引用的右值引用。 一、右值引用是什么 在从C语言进入到C时我们就已经开始接触到引用 int i 0; int ir i; 引用在我们以往的理解就是给一个变量取别名实际上我们也确实可以这么理解。 那么什么又是右值 这里就需要区分左值和右值的概念这里就需要注意许多刚接触到C的初学者可能只是片面的认为 在“左边的就是左值 在”右边的就是右值而这种区分方式是严重错误的。 int i 0; const int i1 2; 那我们可以理解为具有常性不可更改的就是右值可更改的就是左值吗 也不行 其实区分左值还是右值很简单就看它是否可以被取地址可以被取地址的就是左值不可以被取地址的就是右值。 int i 0; 左值 const char c; 左值 double* d; 左值 string str; 左值 int ii i; 左值 以上都可以被取地址所以都是左值 1; 右值 sizeof(int); sizeof(int)的返回值为右值 (xy); 运算符的本质其实也是调用函数所以也是右值 int(1); 匿名对象也是右值 以上就是常见的右值 右值引用 左值引用 是 int ii i; 而C新增加的右值引用是专门对于右值进行引用使用 int a 1, b 2; int i 10; int i1 ab; int i2 sizeof(a); 二、使用步骤和意义 1. 右值引用和左值引用其实都用共同的目的那就是为了减少拷贝在我们曾经模拟实现的string和vector中我们为了减少拷贝总是会去使用左值引用。 string代码如下示例 void Swap(string str) {::swap(_str, str._str);::swap(_size, str._size);::swap(_capacity, str._capacity); } string(const string str) //拷贝构造:_str(nullptr), _capacity(0),_size(0) {string tmp(str._str);Swap(tmp); }1.1 那么是不是左值引用就只能引用左值 string(const string str) //拷贝构造:_str(nullptr), _capacity(0),_size(0) {string tmp(str._str);Swap(tmp); }string str string(hello world);这里我们采用匿名对象来构造一个string刚刚我们也说了匿名对象也是右值但是仍然可以走上面的拷贝构造因为我们使用了const string str加了const这就使得我们的左值引用也可以引用右值。 而我们的右值引用是不可以引用左值的大家可以自行尝试编译器是会报错的。 1.2 综上述既然我们的const 左值引用也可以去引用右值那么右值引用的意义是不是就不大了 2.右值引用的最大意义 我们先来看刚刚的示例代码 代码如下示例 string(const string str) //拷贝构造:_str(nullptr), _capacity(0),_size(0) {string tmp(str._str); //这里发生了拷贝Swap(tmp); }即使我们采用左值引用这里仍然会发生一次拷贝而在某些容器例如vector下拷贝的代价可能会十分巨大而面对一些将亡值拷贝的意义并不大因为有更好的方式 这个时候右值引用就凸显出了它的作用 string(string str):_str(nullptr), _capacity(0), _size(0){Swap(str);}因为在这种情况下这里的str一定是一个右值中的将亡值它的生命周期仅仅只是为了构造新的string所以我们完全可以将其数据用过Swap掠夺过来再让他自行析构这就减少了一次拷贝提高了程序的运行效率 2.1 完美转发 关于右值引用还需要注意的是一旦使用了右值引用那么就会改变其原有属性 int a 1, b 2; int i 10; int i1 ab; int i2 sizeof(a); 就例如该上 这里的i,i1,i2都会因为右值引用改变右值属性变为左值属性并且你可以对它们的内存数据进行修改这是因为这些右值数据被移动到了一个其他区域储存起来。 而C11为了保持其原有的属性提供了完美转发。 std::forward(x); void Fun(int x) { cout 左值引用 endl; } void Fun(const int x) { cout const 左值引用 endl; } void Fun(int x) { cout 右值引用 endl; } void Fun(const int x) { cout const 右值引用 endl; } // std::forwardT(t)在传参的过程中保持了t的原生类型属性。 templatetypename T //万能折叠 void PerfectForward(T t) {Fun(std::forwardT(t));//完美转发 }2.2 万能折叠 templatetypename T //万能折叠 void PerfectForward(T t) {Fun(std::forwardT(t)); }通过这样的模版格式来使得t做一个自动折叠的功能如果传的是一个左值那么就是用左值引用如果是一个右值就是右值引用。
http://www.hkea.cn/news/14429735/

相关文章:

  • 做的网站需要什么技术支持wordpress amp插件
  • 如何提高网站的搜索wordpress查询码
  • 用什么网站做框架图php网站建设用什么软件
  • 网站开发进度计划书wordpress收录差劲啊
  • 相亲网站做推广的照片是谁松江品划网站建设开发
  • 网站开发技术联系方式wordpress 信息库插件
  • 网站设计论文结论重庆装修公司有哪些
  • 优惠券推广网站怎么做杭州知名网页设计服务商
  • 网站建设项目来源青岛房产网上查询
  • 禹城做网站的公司网页制作背景图
  • 河北省住房城乡建设厅网站首页wordpress碎语插件
  • 权威行业网站建设公司旅行社网站建设方案书
  • 网站维护一般要几天可以自己做效果图的网站
  • 免费个人网站域名吉林省四平市网站建设
  • 深圳网站建设服务哪个便宜啊能源建设投资有限公司网站
  • 建设工程交流网站怎么看是哪家做的网站
  • 企业专业网站建设我的世界做壁纸的网站
  • 做网站推广每天加班网站建设 营业执照 经营范围
  • 兰溪市建设局网站 图片云南网站设计多少钱
  • 手机网站触摸版咨询公司怎么注册
  • 许昌网站开发关键词指数查询
  • 会做网站的公司优享 wordpress
  • 校园招聘网站策划书wordpress head文件
  • 网站标题被别人改了 应该怎么办科技成就
  • 佛山外贸网站建设资讯建站哪家好 discuz
  • 腾讯域名怎么建设网站wap网站e4a做app
  • 描述个人网站的建站过程如何建网站平台
  • 建设企业网站成本多少钱太原seo软件
  • 科学城做网站公司生产erp软件
  • 广州网站定做教程建设工程监理网站