文章目录
- 一、语法糖:
- 1. 关键字
- 2. 语法
- 二、stl容器:
- 三、智能指针:
- 四、多线程:语言本身提供一些多线程的接口
一、语法糖:
1. 关键字
- auto、decltype:都是用来做类型推导。
- nullptr:NULL在函数重载的时候被认为是整数,void*函数重载的时候会重载到具体的int类型的函数去;nullptr是具体的空指针,用这种方式才会去匹配一个指针类型的模板参数,主要为了类型安全。
- final、override:override就是用来覆盖复写基类的虚函数,final说明继承中某函数不能被覆盖了或不能被继承了。
- constexpr:常量表达式,在声明编译时,让编译器就对函数或变量进行求值。
2. 语法
-
基于范围的for循环:利用auto关键字取出具体的元素或引用,冒号后面跟具体的容器或者基于范围的一个类型。
-
function函数对象:包装一个可执行体,将一个函数转换成一个具体的对象。
bind
lambda
-
目的:写代码更便捷,更严谨。编译器做更多的事情
二、stl容器:
- array:数组
- forward_list:单链表,list是双向链表
- unordered_map、unordered_map:基于key-value散列表实现的容器。根据key可以快速查找到value
三、智能指针:
-
shared_ptr:基于共享的智能指针,有多个对象指向同一资源,就用shared_ptr,里面主要是使用引用计数来实现的;
可能会产生循环引用,用weak_ptr来解决循环引用,因为weak_ptr引用时不会占用引用计数。
-
unique_ptr:只允许一个对象去指向一个具体的资源。
四、多线程:语言本身提供一些多线程的接口
- thread:以前需要传递函数指针,包括参数和一些上下文,现在可以通过bind或lambda传递一个函数对象,更加便捷。
- mutex、lock_guard:互斥锁
- condition_variable:条件变量
- atomic:原子变量,通过同步语义去标记那些需要同步的变量和操作,本质上告诉CPU和编译器不要对这些变量或操作做违反一致性的优化,从而达到和加锁一样的效果,保证程序没有数据竞争