吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3147|回复: 10
收起左侧

[C&C++ 转载] C++11、14、17新特性

[复制链接]
古月不傲 发表于 2020-12-15 16:31
本帖最后由 古月不傲 于 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: (对于学习老视频(也许新视频也不讲)的朋友来说是新特性,阅读源码不可缺少的东西,否则会一头雾水,这里只是简介,不会的自己去查。)

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
junhuan007 + 1 + 1 谢谢@Thanks!
yjczawyl + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

JuncoJet 发表于 2020-12-15 17:15
foreach 是啥时候的标准
a952135763 发表于 2020-12-15 17:22
 楼主| 古月不傲 发表于 2020-12-15 17:23
 楼主| 古月不傲 发表于 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
我有感谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表