C++11、14、17新特性
本帖最后由 古月不傲 于 2020-12-15 16:49 编辑nullptr: 替代NULL
对于整数是0,对于指针是(void *)0.
auto: 自动类型推导
对于很长类型的变量,如迭代器,std::function<...>等等,可以使用auto替代。
decltype: 表达式类型推导
弥补auto只对变量类型推导的不足
template <typename T, typename U>
auto add(T x, U y) -> decltype(x + y) { (托尾返回类型)
return x + y;
}
C++11标准写法,C++14开始不使用 -> decltype(x + y) 也不会报错 。
constexpr: 常量表达式
相较于const更灵活
区间迭代: 简化for的迭代写法
简化对于一般的for迭代代码非常的冗长,让写法足见python化。
for (auto &it : vec) {
std::cout << it << std::endl;
}
初始化列表: 提供统一初始化变量
统一初始化变量,减轻程序员的负担
int arr[]{1, 2, 3};
int a{5};
std::map<std::string, std::string> m{{"张无忌", "赵敏"}, {"杨过", "小龙女"}};
using: 别名增强
提供对模板起别名,另外提供和typedef一样的功能.
template <typename T>
void print(T n) {
std::cout << "n = " << n << std::endl;
}
typelate <typename T>
using p = print(T);
using pFunc = void(*)(int, int);
默认模板参数:
template <typename T = int>
委托构造:
初始化一个构造函数时,构造另一个构造函数
继承构造:
简化构造父类的成员
智能指针:
std::unique_ptr 独占
std::shared_ptr 共享
Lambda表达式:
对于不需要被复用的函数,直接写成Lambad表达式
容器: std::array: 静态数组
std::forward_list: 单向链表
std::unordered_map std::unordered_multimap: 无序哈希表(键值)
std::unordered_set std::unordered_multiset: 无序哈希表(值)
std::tuple: 元组,类似于结构体,可以用于存储多个不同类型的元素正则表达式:
std::regex:
线程:
std::thread 线程
std::mutex 独占互斥量 只能关联一次
std::recursive_mutex 递归互斥量 可以关联多次 相当于Windows的临界区
std::timed_mutex 超时独占互斥量
std::recursive_timed_mutex 超时递归互斥量
std::lockguard 为mutex自动加锁解锁
std::unique_lock 同std::lockguard,但更灵活,主要体现在第二个参数。
std::adopt_lock 领养锁 表示锁已经被提前lock了,现在处于领养状态。
std::defer_lock 延迟锁 表示由自己决定加锁、解锁,解锁可以交由系统处理
std::try_lock 尝试拿锁 如果没拿到锁,则代码继续执行,不会卡住。
std::release 解除锁的关联
std::try_lock_for 等待一定的时间
std::try_lock_until 等待到一个时间点
std::future 用于获取一个线程的返回结果有
std::packaged_task 用于打包一个任务 类似于std::function
std::promise 用于线程之间的值传递
std::condition_variable 条件变量 用于线程之间的通信
原子操作:
std::atomic
右值引用: 即右值直接被当成引用传递,说白了就是把地址扔过去。
比如临时对象等,其它接下来不会再次使用的值,也被称为亡值,即即将死亡的值。
初衷是为了提高效率,达到和传地址那样,共用一份内存。
函数包装器:
std::function
inline:
替代类外静态成员变量的定义
可以直接声明并定义类的静态成员变量,而无须再类外定义。
std::optional: 高效优雅的参数返回
高效: 对于返回对象的值时,避免不了会调用构造函数,而对于std::optional可以返回std::nullopt避免开销。
优雅: 对于返回int, bool, nullptr等等这些模棱两可的类型,进行出错判断,每个人编码风格不同,有的人用0代表失败,有的人用-1代表失败等等,只能通过文档判别是不是很苦恼?所以,统一使用std::optional可以大大提高代码的可读性。
Postscript: (对于学习老视频(也许新视频也不讲)的朋友来说是新特性,阅读源码不可缺少的东西,否则会一头雾水,这里只是简介,不会的自己去查。) foreach 是啥时候的标准 20的特性那 ???? JuncoJet 发表于 2020-12-15 17:15
foreach 是啥时候的标准
应该是11的 a952135763 发表于 2020-12-15 17:22
20的特性那 ????
... 东西太多自己有兴趣查吧。 感谢楼主分享经验。 厉害啊,原来这是个大佬 感谢楼主的分享,学习了。
以前学过C++都忘记差不多了。 好多细节,赞一个 我有感谢楼主
页:
[1]
2