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

如何设计网站首页怎么推广一个平台

如何设计网站首页,怎么推广一个平台,建设网站宽度最好是多少钱,深圳自适应网站开发目录 左值 右值 左值引用与右值引用比较 左值引用总结: 右值引用总结: 左值引用的使用场景: 引用传参和做返回值都可以提高效率(减少拷贝) 左值引用的短板: 右值引用和移动语义解决上述问题: 下面就是有移动…

目录

左值

右值

左值引用与右值引用比较

左值引用总结:

右值引用总结:

左值引用的使用场景:

引用传参和做返回值都可以提高效率(减少拷贝)

左值引用的短板:

右值引用和移动语义解决上述问题:

下面就是有移动构造的情况

不仅仅有移动构造,还有移动赋值:

STL中的容器都是增加了移动构造和移动赋值

右值引用的使用问题:​编辑


左值

        左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。

定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址

int main()
{// 以下的p、b、c、*p都是左值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);// 这里编译会报错:error C2106: “=”: 左操作数必须为左值10 = 1;x + y = 1;fmin(x, y) = 1;return 0;
}

左值引用就是给左值的引用,给左值取别名

右值引用就是对右值的引用,给右值取别名

左值引用与右值引用比较

左值引用总结:

        1. 左值引用只能引用左值,不能引用右值。

        2. 但是const左值引用既可引用左值,也可引用右值 (匿名对象传参)

int main()
{// 左值引用只能引用左值,不能引用右值。int a = 10;int& ra1 = a;   // ra为a的别名//int& ra2 = 10;   // 编译失败,因为10是右值// const左值引用既可引用左值,也可引用右值。const int& ra3 = 10;const int& ra4 = a;return 0;
}

右值引用总结:

        1. 右值引用只能右值,不能引用左值。

        2. 但是右值引用可以move以后的左值。

        move(左值1)是右值 , move()相当于类型转换.

        左值1还是左值

int main()
{// 右值引用只能右值,不能引用左值。int&& r1 = 10;// error C2440: “初始化”: 无法从“int”转换为“int &&”// message : 无法将左值绑定到右值引用int a = 10;int&& r2 = a;// 右值引用可以引用move以后的左值int&& r3 = std::move(a);return 0;
}

左值引用的使用场景:

引用传参和做返回值都可以提高效率(减少拷贝)

void func1(bit::string s)
{}
void func2(const bit::string& s)
{}
int main()
{bit::string s1("hello world");// func1和func2的调用我们可以看到左值引用做参数减少了拷贝,提高效率的使用场景和价值func1(s1);func2(s1);// string operator+=(char ch) 传值返回存在深拷贝// string& operator+=(char ch) 传左值引用没有拷贝提高了效率s1 += '!';return 0;
}

左值引用的短板:

        但是当函数返回对象是一个局部变量,出了函数作用域就不存在了,就不能使用左值引用返回, 只能传值返回。

        但是传值返回会导致至少1次拷贝构造(如果是一些旧一点的编译器可能是两次拷贝构造,新的编译器会进行优化)。

编译器优化情况

右值引用和移动语义解决上述问题:

        在string中增加移动构造(参数是右值),移动构造本质是将参数右值的资源窃取过来(右值(将亡值)不会被释放),会被占位已有,那么就不用做深拷贝了,所以它叫做移动构造,就是利用别人的资源来构造自己

解决了这种问题

如果同时有拷贝构造(const string& s)和移动构造(string&& s)

        传左值时会用拷贝构造

        传右值时会用移动构造

下面就是有移动构造的情况

// 移动构造
string(string&& s):_str(nullptr),_size(0),_capacity(0)
{cout << "string(string&& s) -- 移动语义" << endl;swap(s);
}int main()
{bit::string ret2 = bit::to_string(-1234);return 0;
}

不仅仅有移动构造,还有移动赋值

        在string类中增加移动赋值函数,再去调用to_string(1234),不过这次是将 to_string(1234)返回的对象赋值给s1对象,这时调用的是移动赋值。

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

写了移动赋值后,这里运行后,我们看到调用了两次构造和一次移动赋值。

        第一次构造是构造s1,第二次是构造str, 移动赋值是将str利用.

STL中的容器都是增加了移动构造和移动赋值

所以使用容器时尽可能传输匿名对象可以提高效率.

右值引用的使用问题:

在使用时应该注意左右值的转化

在接受一次后会使,右值变成左值

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

http://www.dinnco.com/news/47866.html

相关文章:

  • 两人做性视频网站114网址大全
  • 国外男女直接做的视频网站网络营销策略实施的步骤
  • 商户网站建设公司成都有实力的seo团队
  • 企业备案网站名称怎么填互联网下的网络营销
  • 成都网站建设 四川冠辰哪里可以学企业管理培训
  • 深圳市建设执业培训中心网站泉州关键词搜索排名
  • 网站后台无法修改信息北京网
  • 石狮市网络优化主要做什么
  • 开发公司 网站建设价格软件推广怎么做
  • 有哪些专门做展会创意的网站b2b多平台一键发布
  • 在线做投资网站网络销售平台怎么做
  • 凤冈建设局网站优化关键词排名
  • 网上做彩票网站排名运营商推广5g技术
  • 做网站一个月20g流量够吗百度推广河南总部
  • 做一个在线支付网站如何快速收录一个网站的信息
  • 怎么做外国网站流量企业网站建设价格
  • 做关于时尚网站的目的百度快速收录工具
  • seo服务器优化辽宁好的百度seo公司
  • 怎么建独立网站小升初最好的补课机构排行榜
  • 重庆汽车网站建设seo新手快速入门
  • 做解析会员电影的网站seo教学实体培训班
  • 做论坛网站前段用什么框架好点百度商城购物
  • 网站建设项目进展情况怎样建网站?
  • 福建省建设厅网站建造师证转出在线培训课程
  • 网站建设需要的费用电商怎么做如何从零开始
  • 发稿什么意思福州网站seo公司
  • 山东定制网页建站海外短视频软件
  • 做盗版网站 国外服务器域名停靠
  • 北京和君网站建设百度一下百度搜索百度
  • 福建定制网站开发百度推广账户搭建