C/C++学习笔记 各版本主要新增内容一览

本文介绍了C++从C++11到C++20的主要更新和改进,包括C++11的auto、lambda表达式、移动语义等,C++14的聚合成员初始化、通用lambda,C++17的内联变量、折叠表达式,以及C++20的概念、协程、模块等重大特性。这些更新旨在提升语言的效率、安全性和易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、C++11

        2011 年 8 月 12 日,ISO(国际标准化组织)批准了 C++ 的新版本,称为 C++11。 C++11 为 C++ 语言添加了一组全新的特性! 其中一些新功能很有帮助。

(1)C++11的目标和设计

        Bjarne Stroustrup 将 C++11 的目标描述为:

        1、建立在 C++ 的优势之上——与其试图将 C++ 扩展到它可能较弱的新领域(例如,具有大量 GUI 的 Windows 应用程序),不如专注于让它做得更好。

        2、使 C++ 更易于学习、使用和教授——提供使语言更一致和更易于使用的功能。

        为此,遵守以下一般原则:

        1、尽可能保持与旧版本 C++ 和 C 的稳定性和兼容性。在 C++03 下运行的程序通常仍应在 C++11 下运行。

        2、将核心语言扩展的数量保持在最低限度,并将大部分更改放在标准库中(此版本没有很好地满足这个目标)。

        3、专注于改进抽象机制(类、模板),而不是添加机制来处理特定的、孤立的情况。

        4、为新手和专家添加新功能。

        5、增加类型安全性,以防止无意的错误。

        6、提高性能并允许 C++ 直接与硬件一起工作。

        7、考虑可用性和生态系统问题。 C++ 需要与其他工具很好地协同工作,易于使用和教授,等等……

        C++11 在主模块上与 C++03 并没有太大的不同,但它确实增加了大量的新功能。

(2)C++11 的主要新特性

        这里列出了 C++11 添加的主要功能。 此列表并不全面。

        auto(使用 auto 关键字对对象进行类型推导)
        char16_t 和 char32_t 以及支持它们的新文字
        constexpr (符号常量:const 和 constexpr 变量)
        decltype
        默认说明符
        委托构造函数(重叠和委托构造函数)
        删除说明符(转换构造函数,显式和删除)
        枚举类(作用域枚举(枚举类))
        外部模板
        Lambda 表达式(lambda 简介(匿名函数))和捕获(12.8 - Lambda 捕获)
        long long int(对象大小和 sizeof 运算符)
        移动构造函数和赋值(移动构造函数和移动赋值)
        Noexcept 说明符(未捕获的异常和包罗万象的处理程序)
        nullptr (空指针)
        覆盖和最终说明符(覆盖和最终说明符以及协变返回类型)
        基于范围的 for 语句(For-each 循环)
        r 值引用(R 值引用)
        static_assert (断言和静态断言)
        std::initializer_list (std::initializer_list )
        尾随返回类型语法(使用 auto 关键字的对象类型推导)
        类型别名(Typedefs 和类型别名)
        typedef 现在可以 typedef 模板类
        统一初始化
        用户定义的文字
        可变参数模板
        >> 现在将被正确解释为关闭模板对象

        C++ 标准库中还有许多新类可供使用。

        更好地支持多线程和线程本地存储
        哈希表
        随机数生成改进(使用 Mersenne Twister 生成随机数)
        参考包装器(对象切片)
        正则表达式
        std::auto_ptr 已被弃用(智能指针和移动语义介绍)
        std::tuple(按引用返回和按地址返回)
        std::unique_ptr

2、C++14

        2014 年 8 月 18 日,ISO(国际标准化组织)批准了 C++ 的新版本,称为 C++14。 与添加大量新功能的 C++11 不同,C++14 是一个相对较小的更新,主要包括错误修复和小改进。

        这里列出了 C++14 添加的主要改进。此列表并不全面。

        聚合成员初始化(结构、成员和成员选择简介)
        二进制文字(文字常量)
        [[deprecated]] 属性
        数字分隔符(文字常量)
        函数返回类型推导(使用 auto 关键字对对象进行类型推导)
        Generic lambdas (Introduction to lambdas (anonymous functions))
        宽松的 constexpr 函数(Consexpr 和 consteval 函数)
        变量模板
        std::make_unique

3、C++17

        2017 年 9 月,ISO(国际标准化组织)批准了 C++ 的新版本,称为 C++17。 C++17 包含大量新内容。

        这里列出了 C++17 添加的主要改进。 此列表并不全面。

        __has_include 预处理器标识符,用于检查可选头文件是否可用
        在编译时解析的 if 语句
        if 语句和 switch 语句中的初始化器
        内联变量(跨多个文件共享全局常量(使用内联变量))
        折叠表达式
        嵌套命名空间现在可以定义为命名空间 X::Y (用户定义的命名空间和范围解析运算符)
        删除 std::auto_ptr 和其他一些不推荐使用的类型
        static_assert 不再需要诊断文本消息参数(Assert 和 static_assert)
        std::any
        std::byte
        std::filesystem
        std::optional
        std::shared_ptr 现在可以管理 C 样式数组(但 std::make_shared 还不能创建它们)
        std::size (数组 (第二部分))
        std::string_view
        结构化绑定声明
        构造函数的模板推导
        三元组已被删除
        typename 现在可以在模板模板参数中使用(而不是类)
        UTF-8 (u8) 字符文字

4、C++20

        2020 年 2 月,ISO(国际标准化组织)批准了新版本的 C++,称为 C++20。 C++20 包含自 C++11 以来对该语言的最大更改。

        这里列出了 C++20 添加的主要改进。此列表并不全面。

        通过自动参数的缩写函数模板(具有多种模板类型的函数模板)
        日历和时区支持的 Chrono 扩展
        概念,允许您对模板参数施加约束
        Constexpr 虚函数、联合、try、catch、dynamic_cast 和 typeid
        Constinit 关键字,断言变量具有静态初始化
        协程
        指定初始化器(结构聚合初始化)
        使用 consteval 关键字的立即函数(Constexpr 和 consteval 函数)
        模块,#include 的替代品
        范围
        std::erase
        std::make_shared 用于数组
        std::map::contains()
        std::span
        字符串格式化库(还没有教程,请参阅 https://en.cppreference.com/w/cpp/utility/format)
        字符串文字作为模板参数
        使用 spaceship 运算符 <=> 进行三向比较
        使用范围枚举
        视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值