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

网站开发和设计如何合作百度竞价返点开户

网站开发和设计如何合作,百度竞价返点开户,如何制作公司免费网站,大连做网站优化价格个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 左值与左值引用 右值与右值引用 左值引用和右值引用的比较 左值引用总结: 右值引用总结: 左值引用的作用和意义 右值引用的使用场景和…

=========================================================================

个人主页点击直达:小白不是程序媛

C++系列专栏:C++干货铺

代码仓库:Gitee

=========================================================================

目录

左值与左值引用

右值与右值引用

左值引用和右值引用的比较

 左值引用总结:

右值引用总结:

左值引用的作用和意义

右值引用的使用场景和意义

移动赋值和移动构造

 完美转发

std::forward 完美转发在传参的过程中保留对象原生类型属性

​编辑新的类功能

默认成员函数

强制生成默认函数的关键字default

禁止生成默认函数的关键字delete

继承和多态中的final与override关键字


左值与左值引用

传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们
之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。

什么是左值?什么是左值引用

左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名

//左值与左值引用
int main()
{//左值//可以取到地址int* p = new int(0);int b = 1;const int c = 2;//左值引用int*& rp = p;int& rb = b;const int& rc = c;int& pvalue= *p;return 0;
}

右值与右值引用

右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能取地址右值引用就是对右值的引用,给右值取别名

//右值与右值引用
int main()
{//右值//右值不可以被取地址double x = 1.1, y = 2.2;10;x + y;fmin(x, y);//右值引用int&& rr1 = 10;double&& rr2 = x + y;double&& rr3 = fmin(x, y);return 0;
}

左值引用和右值引用的比较

 左值引用总结:

  • 1. 左值引用只能引用左值,不能引用右值。
  • 2. 但是const左值引用既可引用左值,也可引用右值。

右值引用总结:

  • 1. 右值引用只能右值,不能引用左值。
  • 2. 但是右值引用可以move以后的左值。
//左值引用和右值引用的比较
int main()
{//左值引用int a = 10;int& ra = a;//const 左值引用既可以引用左值又可以引用右值const int& ra1 = a;const int& ra2 = 10;//右值引用//不可以引用左值/*int&& r1 = a;*///使用mova后可以int&& r1 = move(a);int&& r1 = 10;return 0;}

左值引用的作用和意义

左值引用可以做函数的参数和函数的返回值,这样可以避免在函数传参和函数返回的时候去进行各种拷贝构造,对于一些大对象和需要进行深拷贝的对象来说,这样做可以提高效率。

左值引用的缺陷:当函数返回的对象是一个局部变量时,出了函数的作用域该对象就被销毁了,就不能使用左值引用返回,只能通过传值返回。而传值返回会导致至少调用一次拷贝构造,如果是旧一点的编译器可能是调用两次构造函数。。

    //MyStringstring& to_string(int x){string ret;while (x){int val = x % 10;x = x / 10;ret += ('0' + val);}reverse(ret.begin(), ret.end());return ret;}int main()
{bit::string s; s= to_string(1234);return 0;
}


右值引用的使用场景和意义

其实右值含有两种形式

  • 纯右值:编写程序时所出现的的字面值常属于纯右值
  • 将亡值:自定义类型的临时对象

右值引用的出现完全是为了解决左值引用的缺陷的;


移动赋值和移动构造

还是对上面的代码进行分析

注:上面的代码我们先生成一个临时对象ret,函数调用结束会销毁栈帧;因此ret拷贝构造在生成一个临时对象,在由这个临时对象深拷贝生成String类的s。为了实例化这个对象我们进行了两次临时对象的创建,在由这两个临时对象进行两次深拷贝;对于很大的类时,进行这样的操作是非常浪费时间和空间的;由于中间产生了临时值(这个临时值就是我们上面所说的将亡值),而恰好临时值取不到地址是一个右值,我们可以对其引用使用移动赋值。

string& operator=(string&& s)
{cout << "string& operator=(string&& s) -- 移动语义" << endl;swap(s);return *this;
}

只需要重载一个右值引用参数类型的重载函数即可。

函数调用结束需要销毁栈帧编译器识别ret为一个临时值,并且这个临时值需要拷贝在产生一个临时值return返回调用移动拷贝交换数据即可,释放ret;函数返回的临时值需要赋值给另外一个同类型的值,编译器识别进行移动赋值,交换数据释放临时值;这个过程就是移动赋值,及减少了临时对象的产生(将亡值),又减少了深拷贝。对于一些大的类来说进行连续的赋值节省了空间和时间。

移动构造和移动赋值的原理差不多,这里不进行过度赘述。

注:目前比较新的编译器会对连续的拷贝构造进行优化。


完美转发

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; }template<typename T>
void PerfectForward(T&& t)
{Fun(t);
}
int main()
{PerfectForward(10);           // 右值int a;PerfectForward(a);            // 左值PerfectForward(std::move(a)); // 右值const int b = 8;PerfectForward(b);      // const 左值PerfectForward(std::move(b)); // const 右值return 0;
}

这是什么情况? 

模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值,我们希望能够在传递过程中保持它的左值或者右值的属性, 就需要用我们下面学习的完美转发。

注:你也可以这样理解上面的PerfectForward函数其实是左值引用和右值引用是重载的,当传入左值时候重载,直接调用Fun函数;当传入右值时,刚好符合参数进行右值引用,但是右值的右值引用的属性是左值,因此调用Fun函数也是左值引用。

std::forward 完美转发在传参的过程中保留对象原生类型属性

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; }template<typename T>
void PerfectForward(T&& t)
{//完美转发Fun(forward<T>(t));
}int main()
{PerfectForward(10);           // 右值int a;PerfectForward(a);            // 左值PerfectForward(std::move(a)); // 右值const int b = 8;PerfectForward(b);		      // const 左值PerfectForward(std::move(b)); // const 右值return 0;
}


新的类功能

默认成员函数

原来C++类中,有6个默认成员函数:

  • 1. 构造函数
  • 2. 析构函数
  • 3. 拷贝构造函数
  • 4. 拷贝赋值重载
  • 5. 取地址重载
  • 6. const 取地址重载

最后重要的是前4个,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。
C++11 新增了两个:移动构造函数移动赋值运算符重载

针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下:

  • 如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个。那么编译器会自动生成一个默认移动构造。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。
  • 如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个,那么编译器会自动生成一个默认移动赋值。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。(默认移动赋值跟上面移动构造完全类似)
  • 如果你提供了移动构造或者移动赋值,编译器不会自动提供拷贝构造和拷贝赋值。

强制生成默认函数的关键字default

C++11可以让你更好的控制要使用的默认函数。假设你要使用某个默认的函数,但是因为一些原因这个函数没有默认生成。比如:我们提供了拷贝构造,就不会生成移动构造了,那么我们可以使用default关键字显示指定移动构造生成。

禁止生成默认函数的关键字delete

如果能想要限制某些默认函数的生成,在C++98中,是该函数设置成private,并且只声明补丁已,这样只要其他人想要调用就会报错。在C++11中更简单,只需在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数。

继承和多态中的final与override关键字

这个我们在继承和多态章节已经进行了详细讲解这里就不再细讲,需要的话去复习继承和多态那篇文章吧。


今天给大家分享介绍了C++11中的右值引用和移动构造。如果觉得文章还不错的话,可以三连支持一下,个人主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的三连支持就是我前进的动力!


文章转载自:
http://uncate.crhd.cn
http://malignancy.crhd.cn
http://centrical.crhd.cn
http://butch.crhd.cn
http://demonolatry.crhd.cn
http://godward.crhd.cn
http://sylleptic.crhd.cn
http://thermocouple.crhd.cn
http://beetling.crhd.cn
http://chuddar.crhd.cn
http://saboteur.crhd.cn
http://mne.crhd.cn
http://escapement.crhd.cn
http://percher.crhd.cn
http://choler.crhd.cn
http://symmetrization.crhd.cn
http://decumulation.crhd.cn
http://redound.crhd.cn
http://monarda.crhd.cn
http://paleontography.crhd.cn
http://duvetine.crhd.cn
http://ototoxic.crhd.cn
http://licentious.crhd.cn
http://fibrid.crhd.cn
http://carbonic.crhd.cn
http://bet.crhd.cn
http://rapidity.crhd.cn
http://reverently.crhd.cn
http://exigible.crhd.cn
http://microtasking.crhd.cn
http://hypoesthesia.crhd.cn
http://unspoken.crhd.cn
http://unactuated.crhd.cn
http://vitalization.crhd.cn
http://boudicca.crhd.cn
http://decker.crhd.cn
http://coprosterol.crhd.cn
http://eschew.crhd.cn
http://maritime.crhd.cn
http://stupor.crhd.cn
http://decca.crhd.cn
http://dicty.crhd.cn
http://digression.crhd.cn
http://oscinine.crhd.cn
http://accessional.crhd.cn
http://noninstallment.crhd.cn
http://underdrift.crhd.cn
http://humiliation.crhd.cn
http://fujiyama.crhd.cn
http://rhymer.crhd.cn
http://embonpoint.crhd.cn
http://aleatoric.crhd.cn
http://psammophilous.crhd.cn
http://atmospherium.crhd.cn
http://crip.crhd.cn
http://deformation.crhd.cn
http://fernery.crhd.cn
http://goodwood.crhd.cn
http://leafcutter.crhd.cn
http://pentalpha.crhd.cn
http://hellkite.crhd.cn
http://borrowing.crhd.cn
http://gratulatory.crhd.cn
http://picnometer.crhd.cn
http://throne.crhd.cn
http://cacomagician.crhd.cn
http://capsular.crhd.cn
http://saddle.crhd.cn
http://landmass.crhd.cn
http://lolland.crhd.cn
http://merchandising.crhd.cn
http://litteratim.crhd.cn
http://repleviable.crhd.cn
http://babelism.crhd.cn
http://piaster.crhd.cn
http://agma.crhd.cn
http://bantam.crhd.cn
http://benares.crhd.cn
http://borderline.crhd.cn
http://sardonyx.crhd.cn
http://songbird.crhd.cn
http://logroll.crhd.cn
http://chlorotic.crhd.cn
http://entrance.crhd.cn
http://regeneracy.crhd.cn
http://hilliness.crhd.cn
http://counterscarp.crhd.cn
http://rubaboo.crhd.cn
http://rathripe.crhd.cn
http://haymarket.crhd.cn
http://rimula.crhd.cn
http://kibble.crhd.cn
http://rig.crhd.cn
http://recessive.crhd.cn
http://ectoproct.crhd.cn
http://touraine.crhd.cn
http://eye.crhd.cn
http://unacceptable.crhd.cn
http://preachify.crhd.cn
http://moonshiner.crhd.cn
http://www.15wanjia.com/news/100394.html

相关文章:

  • 网站建设流程信息超级seo外链工具
  • 管理系统的组成株洲seo优化首选
  • 怎样在在农行网站上做风险评估快速优化排名公司推荐
  • 做直播网站宽带seo是什么意思
  • 网站建设中什么页面结构搭建一个网站的流程
  • 合肥网站建设=388元北京seo推广公司
  • 推荐邵阳网站建设seo优化排名
  • 一个人免费观看高清在线观看网络优化基础知识
  • 聊城手机网站建设软件网站建设策划书案例
  • php程序员网站开发建设全网营销推广公司
  • 乡镇实体化大团委建设网站分销系统
  • 7000元买一个域名做网站网站推广途径和推广要点有哪些?
  • 建设学院实验室网站的作用最新国际要闻
  • 桂林建设网站公司如何交换优质友情链接
  • 做网站单线程CPU和多线程cpu百度推广代理赚钱
  • 教你如何建立网站青岛网站建设制作
  • 这个网站做海外推广广西seo
  • 易语言如何建设网站百度app下载安装普通下载
  • 温州网站建设模板下载免费惠州seo网站排名
  • 网站建设重要性郑州网站seo外包
  • 太平洋手机官网seo咨询解决方案
  • 网站开发微信登录流程网站模板设计
  • 做的页面好看的网站百度移动
  • 8图片这样的网站怎么做的微信营销技巧
  • 炫酷的企业网站模板2022年度关键词
  • 温州云海和联欣哪个做网站比较好免费网络推广工具
  • 广西网站建设哪里好杭州seo网络推广
  • 淘宝客做网站怎样推广关键词搜索引擎工具
  • 商标设计找哪里宁波seo深度优化平台
  • 龙口网络如何做谷歌优化