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

成都网站建设排行榜整合营销包括哪三方面

成都网站建设排行榜,整合营销包括哪三方面,织梦本地做的网站内网访问不,简述建设网站建设的基本流程目录 一、右值引用与移动语义 1.左值引用与右值引用 2.移动构造和移动赋值 二、引用折叠 三、完美转发 一、右值引用与移动语义 1.左值引用与右值引用 左值:可以取到地址的值,比如一些变量名,指针等。右值:不能取到地址的值…

目录

一、右值引用与移动语义

1.左值引用与右值引用

2.移动构造和移动赋值

二、引用折叠 

三、完美转发


一、右值引用与移动语义

1.左值引用与右值引用

  • 左值:可以取到地址的值,比如一些变量名,指针等。
  • 右值:不能取到地址的值,比如常量、临时对象、匿名对象、表达式结果等。
  • 左值引用:给左值取别名。&表示左值引用。
  • 右值引用:给右值取别名。&&表示右值引用。
  • 一般情况下左值引用(&)不能引用右值,除非使用const修饰该左值引用。
  • 一般情况下右值引用(&&)不能引用左值,除非用move修饰该左值。

 注意:左值引用和右值引用是左值。

示例如下:

int main()
{int a = 8;//其中a为左值。int& pa=a;//pa为左值引用,引用了左值a//8;//8是一个常量为右值int(9);//9是匿名对象为右值5 + 3;//表达式的结果7为右值int&& pb = 8;//pb为右值引用,引用了右值8。int&& pc = int(9);int&& pd = 5 + 3;//const int& pl= 8;//const修饰后的左值引用可引用右值。int&& pr = move(a);//move修饰左值后可被右值引用引用。return 0;
}

2.移动构造和移动赋值

        左值引用可以使得在函数传参过程中减少拷贝,在函数内直接对实参进行修改等等。这些可以大大的提高程序的执行效率。但是对于在被调函数内创建的临时对象不能直接传引用返回到原函数。因为在函数结束后这些临时对象会随着函数栈帧的销毁而销毁,而引用最底层用的是指针。所以必须得返回对象从而进行拷贝转移资源。这样的话会大大的降低程序的执行效率。

        对于以上左值引用的不足之处,右值引用就可以得到一个还好的解决。

        右值引用在引用右值的时候实际上是把该右值的资源的地址保存。而该资源不会被立即释放掉,相当于延长了生命周期,因为右值都是一些临时对象、常量、匿名对象等这些“将亡”值。反正这些资源又没有人使用,那么就不急着释放它可以让右值引用接管它。

        而对于把左值move后进行右值引用,相当于“掠夺”资源,这种情况一般都是该左值不再被需要了,从而把它move让右值引用接管,那么原来的那个左值的状态是未定义的,要避免使用它。

        当然单上面的内容,还体现不出右值引用的高效之处,接下来我们来看右值引用的两个应用的地方,移动构造和移动赋值。

        移动构造和移动赋值的实现是非常简单的就是交换资源,把自己的空资源给别人把别人的拿过来。如下一个string类的移动构造和移动赋值的简单实现:

string(string&& s)
{swap(s);
}
string& operator=(string&& s)
{swap(s);return *this;
}

移动构造和移动赋值相比拷贝构造和拷贝赋值效率是非常之高的,值得我们学习并使用。

二、引用折叠 

        C++中不能直接定义引⽤的引⽤如 int& && r = i; ,这样写会直接报错,通过模板typedef
中的类型操作可以构成引⽤的引⽤。
        通过模板或typedef中的类型操作可以构成引⽤的引⽤时,这时C++11给出了⼀个引⽤折叠的规则:右值引⽤的右值引⽤折叠成右值引⽤,所有其他组合均折叠成左值引⽤。

如下:

template<class T>
void func1(T&& x);
template<class T>
void func2(T& x);

对于func1当传入左值时是(折叠成)左值引用,当传入右值时是(折叠成)右值引用。

对于func2当传入左值时是(折叠成)左值引用,当传入右值时还是(折叠成)左值引用。

func1这样的函数模板我们通常把它称为“万能引用”。

三、完美转发

        当左值与右值在函数之间一直往下传的时候。我们会无法识别它原本是左值还是右值,因为左值引用和右值引用传入下一层后都被视为左值了。会导致移动构造和移动赋值等操作失效。而完美转发就可以解决这个问题。

完美转发需要用到库提供的一个函数模板forward,源码如下:

template <class _Ty>
_Ty&& forward(remove_reference_t<_Ty>& _Arg) noexcept
{ // forward an lvalue as either an lvalue or an rvaluereturn static_cast<_Ty&&>(_Arg);
}

        完美转发forward它主要还是通过引⽤折叠的⽅式实现,下⾯⽰例中如果传递给func1的实参是右值,T被推导为int,没有折叠,forward内部_Arg被强转为右值引⽤返回;如果传递给func1的实参是左值,T被推导为int&,引⽤折叠为左值引⽤,forward内部_Arg被强转为左值引⽤
返回 

void func1(T&& x)
{//......func2(std::forward<T>(x));
}
void func2(T&& x)
{//......
}
http://www.15wanjia.com/news/41749.html

相关文章:

  • wordpress付费主题推荐seo公司赚钱吗
  • 上海技术做网站微博上如何做网站推广
  • 网站建设优化去哪学微信如何投放广告
  • 开发网站的财务分析西安seo优化工作室
  • 用vs2010做网站css东莞建设企业网站
  • 网站建设找客户春哥seo博客
  • 专门做财经的网站彩虹云商城网站搭建
  • wordpress主机和域名绑定域名保定seo网络推广
  • 学院网站板块朋友圈广告怎么投放
  • 一般网站开发好的框架都有哪些百度竞价多少钱一个点击
  • 购物网站的详细设计免费建网站知乎
  • 济南网站地址滨州seo招聘
  • wordpress双语安装天津seo优化公司哪家好
  • 青年旅舍网站开发背景及意义百度地图人工电话
  • 婺城区建设局网站产品线上营销推广方案
  • 政府机关网站备案网站分析案例
  • 浙江建站管理系统价格seo网络优化前景怎么样
  • 西宁网站优化网络营销工具体系
  • 个人注册一个小公司要多少钱搜索引擎优化网页
  • 南山网站制作联系电话谷歌搜索引擎363入口
  • 化妆品公司网站建设方案微信公众号推广网站
  • php网站开发教程广州网络seo优化
  • 浦口区网站建站公司网页设计与网站开发
  • 淘宝客网站如何做推广方案代写软文
  • wordpress 扩展seo是什么姓
  • 在哪人网站要以接it项目做企业seo网站营销推广
  • 淄博政府网站建设公司网络推广平台公司
  • 网站做seo多少钱优化培训学校
  • 做网站在线聊天的模块中小型企业网站设计与开发
  • sql server做网站网页设计制作