古月不傲 发表于 2020-12-15 16:31

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: (对于学习老视频(也许新视频也不讲)的朋友来说是新特性,阅读源码不可缺少的东西,否则会一头雾水,这里只是简介,不会的自己去查。)

JuncoJet 发表于 2020-12-15 17:15

foreach 是啥时候的标准

a952135763 发表于 2020-12-15 17:22

20的特性那 ????

古月不傲 发表于 2020-12-15 17:23

JuncoJet 发表于 2020-12-15 17:15
foreach 是啥时候的标准

应该是11的

古月不傲 发表于 2020-12-15 17:26

a952135763 发表于 2020-12-15 17:22
20的特性那 ????

... 东西太多自己有兴趣查吧。

wanshiz 发表于 2020-12-15 18:06

感谢楼主分享经验。

蟹老板阿 发表于 2021-1-14 10:47

厉害啊,原来这是个大佬

arklearn 发表于 2021-1-14 14:14

感谢楼主的分享,学习了。
以前学过C++都忘记差不多了。

iChinxu 发表于 2021-1-31 08:35

好多细节,赞一个

小小吴 发表于 2021-1-31 20:22

我有感谢楼主
页: [1] 2
查看完整版本: C++11、14、17新特性