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

网站如何绑定域名襄阳seo培训

网站如何绑定域名,襄阳seo培训,揭东建设局网站,培训网站建设方案书右值引用,顾名思义,就是对一个右值进行引用,或者说给右值一个别名。右值引用的规则和左值一用一模一样,都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样,在定义的同时必须立即赋值,如果不立即赋…

右值引用,顾名思义,就是对一个右值进行引用,或者说给右值一个别名。右值引用的规则和左值一用一模一样,都是对一个值或者对象起个别名。

1. 右值引用和左值引用一样,在定义的同时必须立即赋值,如果不立即赋值,语法错误,看下面的例子

class A
{public:int m_val;A(int n):m_val(n) {    }A(A&& a){m_val=a.m_val;cout<<"move constructor is called"<<endl;}A& operator=(const A&r){if(this!=&r){m_val=r.m_val;cout<<"move assignment operator is called"<<endl;}}~A(){cout<<"Destructor is called"<<endl;}
};
int main(int argc, char const *argv[])
{A a(10);        //定一个对象(左值)A& lr=a;        //左值引用,同时赋值A&& rr=move(a);  //定义右值引用,同时赋值A&& rr2;        //定义右值引用,但是没有赋值rrw=move(a);    //非法return 0;
}

2. 右值引用的操作和左值引用一样,操作右值引用,就是操作源对象本身,因为右值引用就是源对象的一个别名。看下面的例子,操作左值引用、右值引用、源对象中的任何一个,其它两个都相应变化。

class A
{public:int m_val;A(int n):m_val(n) {    }A(A&& a){m_val=a.m_val;cout<<"move constructor is called"<<endl;}A& operator=(const A&r){if(this!=&r){m_val=r.m_val;cout<<"move assignment operator is called"<<endl;}}~A(){cout<<"Destructor is called"<<endl;}
};
int main(int argc, char const *argv[])
{A a(10);        //定一个对象(左值)A& lr=a;        //左值引用,同时赋值A&& rr=move(a);  //定义右值引用,同时赋值cout<<"lr.m_val="<<lr.m_val<<" "<<"rr.m_val="<<rr.m_val<<" "<<"a.m_val="<<a.m_val<<endl;cout<<"change value by original object"<<endl;a.m_val=20;cout<<"lr.m_val="<<lr.m_val<<" "<<"rr.m_val="<<rr.m_val<<" "<<"a.m_val="<<a.m_val<<endl;cout<<"change value  by left reference"<<endl;lr.m_val=30;cout<<"lr.m_val="<<lr.m_val<<" "<<"rr.m_val="<<rr.m_val<<" "<<"a.m_val="<<a.m_val<<endl;cout<<"change value  by right reference"<<endl;rr.m_val=40;cout<<"lr.m_val="<<lr.m_val<<" "<<"rr.m_val="<<rr.m_val<<" "<<"a.m_val="<<a.m_val<<endl;cout<<"left reference and right reference won't create any new object"<<endl;return 0;
}

输出结果如下:再次证明,引用就是起别名

3. 从上图可以看出,引用不会产生任何新的对象。

4. 右值引用和移动构造函数、移动赋值运算符没有任何关系。

5. 右值引用被正确赋值以后,还能被二次赋值,引用到一个新的对象上吗?不能。右值引用一旦被定义,随后的操作就对源对象的操作了。看下面这个例子:

class A
{public:int m_val;A(int n):m_val(n) {    }A(A&& a){m_val=a.m_val;cout<<"move constructor is called"<<endl;}A& operator=(const A&r){if(this!=&r){m_val=r.m_val;cout<<"move assignment operator is called"<<endl;}}~A(){cout<<"Destructor is called"<<endl;}
};
int main(int argc, char const *argv[])
{A a1(10);A a2(20);A&& rf=move(a1);rf=move(a2);        //不是对右值引用进行新的引用,而是等价为:a1=move(a2)cout<<"rf.m_val="<<rf.m_val<<"   "<<"a2.m_val= "<<a2.m_val<<endl;a2.m_val=30;cout<<"rf.m_val="<<rf.m_val<<"   "<<"a2.m_val= "<<a2.m_val<<endl;return 0;
}

rf=move(a2);不是二次引用,而是等价为a1=move(a2),因为rf就是a1,这里一个移动赋值运算符被调用了

牢牢记住,右值引用就是给右值(纯右值、将亡值)起个别名,延长右值的生命周期,没看到多大的使用价值。

另外,定义右值引用的时候,经常看到move函数,但是右值引用和move没有任何关系,move的作用是把一个左值强制转换为右值

http://www.qdjiajiao.com/news/1564.html

相关文章:

  • 佛山公共交易资源平台杭州seo网
  • 全flash网站制作新闻今天最新消息
  • 做网站卖东西流程网络营销的特点包括
  • 做网站推广用自己维护吗上海优化seo排名
  • 连云港做网站企业windows优化大师win10
  • 临汾做网站厦门网站到首页排名
  • 网站做qq链接代码收录平台
  • 石家庄网站制作模板seo文章是什么
  • 上饶便宜的网站建设小学培训机构
  • 涿州市住房和城乡建设局网站广州百度竞价托管
  • 收集链接 做网站手机版百度入口
  • 网站提交至google关键词查询工具包括哪些
  • wordpress页脚插件杭州百度整站优化服务
  • 政府网站建设总体情况免费网页空间到哪申请
  • 手机公司网站建设福州网站排名推广
  • 桂林商品房做民宿在哪个网站登记好广州关键词快速排名
  • 建立网站最好的模板网站开发技术有哪些
  • 网站分几种定制网站开发
  • p2p网站建设报价2p排名网站模板建站
  • 怎么做公司网站的二维码关键词优化排名的步骤
  • 有源码做网站百度资源搜索引擎
  • 长沙市网站制作电话网站优化要做哪些
  • 潍坊手机网站全国疫情最新情况最新消息今天
  • 家居网站应该怎么做恶意点击软件有哪些
  • 怎么给自己网站做推广网络营销推广渠道
  • 网络销售入门基本知识重庆seo公司
  • 网站建设哈尔滨百度网盘官方下载
  • 做网站的顺序优化最狠的手机优化软件
  • ps怎么排版规划设计网站网站seo分析常用的工具是
  • 做家常菜网站制作公司官网多少钱