当前位置: 首页 > 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.zhongyajixie.com/news/2367.html

相关文章:

  • 做外贸做的很好的网站谷歌seo优化推广
  • 访问量大的网站选择多少流量的服务器何时短视频推广
  • 网页制作seo工具查询
  • 光谷网站建设哪家好百度指数查询移动版
  • o2o网站建设代理商关键词点击价格查询
  • dede怎么做网站日记佛山网站开发公司
  • 找个网站2021能看到北京seo邢云涛
  • b2c电子商务网站建设方案网站推广技巧和方法
  • 网站开发直播软件站长统计 网站统计
  • 税务网站建设查询网站优化建设
  • 服装做外贸的网站建设企业网站seo推广方案
  • 微网站设计与开发合肥网站推广公司
  • 济南网站制作软件西安网站seo
  • 企业管理的官方网站有哪些网络销售是什么
  • 客户营销广东seo推广
  • 昆山市建设监察大队官方网站磁力宝
  • 办公室装修计入什么科目seo排名优化首页
  • 南京手机网站制作b2b电子商务平台排名
  • 西安哪里可以做公司网站网站优化方案案例
  • 宠物网站建设靠谱的影视后期培训班
  • 网站建设性意见表廊坊seo网站管理
  • 营销型网站建设+课程百度竞价排名事件
  • 委托做的网站版权归属企业培训有哪些方面
  • 什么软件可以做mv视频网站友情链接交换要注意哪些问题
  • 建设网站要做的工作seo专员是干什么的
  • 网站开发公司 深圳平台接广告在哪里接的
  • 做亚马逊运营要看哪些网站济南百度竞价开户
  • 做网站推广可行吗免费的网络推广渠道有哪些
  • 淮北做网站公司网络营销专家
  • 境外建网站whois查询 站长工具