栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ 11 14笔记(3)标准库

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ 11 14笔记(3)标准库

Rvalue reference 右值引用 Move Semantics

为了解决非必要的拷贝:当赋值的右边是一个右值的时候,左边可以去‘偷’右边的内容,而不需要去allocation(分配空间)

  • 左值:变量可以出现在赋值符号的左手边
  • 右值:不能放在左边的叫右值,例如临时对象,以下右边两个是标准库的写法,却推翻了自己的想法,不管他,临时对象就是右值1:

    以前的右值出现在右边是不可以取地址的,但是c++现在希望可以这么做

两种insert 上面的是原始的版本,下面的是‘偷’的版本,原来的string的拷贝函数也需要重载一个,原版copy是深拷贝,重新分配内存,新版是直接指针指像原来的地址(到此为止就是浅拷贝),并且将之前的指针打断。因此,只要保证赋值的那个对象是个右值或者以后不会再用,都可以用‘偷’的方式赋值给别的变量。

Unperfect Forwarding 不完美转接

在forwad里面调用process,第四,五行,forward传入一个右值,但是调用的确是process的左值版本,

perfect Forwarding 完美转接

标准库的写法

写一个move aware class

拷贝构造以及拷贝赋值都需要写一个move版本(参数为 &&str)



测试

对vector的影响最大,对其他容器的影响较小,容器如果是以节点存在的,影响就小

对list的影响

普通版本的copy

move版本的copy,整个容器当成右值

新增的容器

红框的是新的

array

hashtable

篮子是由vector实现的,当元素的个数等于篮子个数时,篮子进行扩充到了原来的两倍左右的素数,然后重新计算元素落的篮子

通常使用时,放的是我们自己设计的类对象,通过hashfunction计算出hashcode,来存放在hashtable中


hash是一个type hash()是一个临时对象 创建一个的临时对象,调用计算得出hashcode

c++ 2.0 以前hash那个是无法通过的

tuple


右下角对类型做操作,元编程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号