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

网站如何绑定域名关键词分类工具

网站如何绑定域名,关键词分类工具,电子商务平台开发,建工信息网右值引用,顾名思义,就是对一个右值进行引用,或者说给右值一个别名。右值引用的规则和左值一用一模一样,都是对一个值或者对象起个别名。 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.15wanjia.com/news/29463.html

相关文章:

  • 动态网站设计选题信息流推广渠道
  • 郑州网站关键词排名技术代理网络推广网站的方法
  • 涉县专业做网站最近三天发生的重要新闻
  • wordpress主题wakeseo助理
  • 专业做网站优化需要多久谷歌paypal官网
  • 网站开发工程师累不累上海野猪seo
  • 5个b2c网站的网址品牌网络推广运营公司
  • 罗源福州网站建设全球网站排名
  • 浙江省特种作业证查询官网seo是一种利用搜索引擎的
  • 临沂网站建设小程序百度大数据查询
  • 做电影网站的服务器需要多大搜索引擎网址有哪些
  • 电影网站做cpa网站seo优化价格
  • 网站建设工作都干啥2020新闻大事件摘抄
  • 做外贸是否需要有自己的网站开电商需要多少钱
  • 网站开发流行google竞价推广
  • 手機如何做网站百度第三季度财报2022
  • 九江网站建设百度关键词搜索推广
  • 高端品牌网站建设是什么百度上打广告怎么收费
  • 网站制作流程详解(学做网站第一步)南京今日新闻头条
  • 新泰网站开发网络运营怎么学
  • 网站托管平台怎么做好seo推广
  • 做门的网站建设百度关键词优化曝光行者seo
  • 萍乡网站开发网络营销的专业知识
  • 建设投资平台网站百度云网盘网页版登录
  • 宿松网站建设公司新网站快速收录
  • o2o商城网站建设万网注册域名查询
  • 东莞微网站建设中国新闻网发稿
  • 网站开发邮件百度网盘app下载安装手机版
  • 网站导航仿站免费b2b网站推广有哪些
  • 一般做平面网站多少钱武汉建站公司