IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++11/14/17 特性 -> 正文阅读

[C++知识库]c++11/14/17 特性

目录:

Move和Forward?
闭包,functor,bind,lamada
智能指针

auto, std::atomic, emplace,nullptr

正文:

1 Move和Forward :
1) 引用(左值)
a) 取地址和取引用的区别??
char *s; char &p=s; 地址符在左边是引用. 地址符在右边是取地址.
b) 传值,传引用和传指针区别?
看子函数定义,是指针类型就是传指针。非指针类型,带地址的就是传引用。
实例请参考:https://www.cnblogs.com/happying30/p/9484860.html
2)?move:
C++11朝码夕解: move和forward:https://zhuanlan.zhihu.com/p/55856487
a)说明了为什么引入move?
为了解决临时变量产生的浪费。比如:通常交换a和b:temp=a;a=b;b=temp;销毁temp. move的思想是temp指向a,a指向b,然后b指向temp即原来的a地址。整个过程不发生拷贝。
b)什么是左值,右值?
原来的引用就是左值,T&.? 上面实例中的临时变量就是右值,T&&(赋值语句的右边也可以使用引用了)
c)?引用折叠
i. A& &变成A&;ii. A& &&变成A&. iii. A&& &变成A& iv. A&& &&变成A&&
3) Forward?
Forward包括两种情况,可以自动识别传入的是左值还是右值。包括了move处理右值的功能。
实例参见:https://www.cnblogs.com/yfceshi/p/7122251.html?
传值就是按照左值处理,传变量按照右值处理.
4) 移动赋值函数和移动构造函数
两者都应用右值功能避免了拷贝

2?闭包,functor,bind,lamada
1) 闭包:是一个集合.
通常的函数使用的变量都是在自己内部定义的, 具有闭包特性的函数扩展了。它可以使用函数外定义的变量而不会出错. 所以实现函数+它使用的外部变量,两者构成了闭包。
闭包实现形式有functor,bind,lamada.
functor: 是一种类,但是可以函数使用方法(算类的构造函数吗?),可以使用外部变量.
bind: 参数1执行函数,其他参数是外部变量。组成了闭包。它已经被lamada代替了。
lamada:匿名函数。它根据不同参数,可以使用外部变量。
2)闭包函数与普通函数的不同使用方法.

下面blog的“从语法上看如何捕获外部变量”的例子,说明了怎么使用外部变量.
C/C++语言中闭包的探究及比较?https://coolshell.cn/articles/8309.html.
functor,bind,lamada 使用实例请参考:
C++中闭包的使用?https://blog.csdn.net/mo_yin/article/details/87532722.
上面的例子是常用的使用方法.有个基本了解.
下面的blog是详细全面的使用方法。按照定义,作用,使用实例(各种情况)介绍,写的逻辑性比较好。
C++11 中的std::function和std::bind:https://www.jianshu.com/p/f191e88dcc80

3 智能指针

3.1 作用:指针离开作用域,可以自动销毁内存.多个指针指向一个内存,p1=p2,p1释放,p2使用出错.c.get 访问智能指针的裸指针.
原理:析构函数里调用delete。这样在构造函数new,在析构函数delete。防止了内存泄漏。
智能指针封装了上面的过程,同时在析构函数增加了引用计数判断,等于0删除,否则不删.
一般公司会封装智能指针.
3.2 shared_ptr and weak_ptr ?区别?
std::shared_ptr,智能指针,存在引用计数. 强指针为0才会被析构
std::weak_ptr,弱引用,用于解决强指针的互相引用(无法释放,一直都有引用计数.类似死锁).原理是弱指针不为0也会析构,避免了互指不能释放的情况.
3.3 unique_ptr和shared_ptr之间的差异?
两者都是智能指针,自动析构。
shared_ptr 有引用计数,可以多个对象同时指向一个指针。
unique_ptr 只能一个对象使用,不用写free自动析构,unique_ptr 更原始一些.

4?other:auto, std::atomic, emplace,nullptr

?std::atomic:原子类型对象的主要特点就是从不同线程访问不会导致数据竞争(data?race)
auto是正向推导,decltype是反向推导.https://my.oschina.net/wangxuanyihaha/blog/183151

?emplace = insert 不创建临时变量。c++11很多都是用新函数,不创建临时变量

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 11:52:27  更:2021-08-19 11:53:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 11:16:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码