【C++】各个版本新的特性和改进

C++ 语言自从其诞生以来,经历了多个版本的更新,每个版本都引入了新的特性和改进,目的是提升语言的表达能力、性能、安全性以及开发效率。下面是各个主要版本(从 C++98 到 C++20)的一些关键特性。

C++98 (1998年)

  • ISO C++ 标准化:C++98 是第一个国际标准化的版本,定义了 C++ 语言的核心规范。
  • STL(标准模板库):在 C++98 中,STL 已经成为标准库的一部分,提供了数据结构(如 vectorlistmap)和算法。
  • 异常处理:C++98 规范了异常处理机制(trycatchthrow)。

C++03 (2003年)

  • 小范围改进:C++03 并没有引入重大的新特性,而是主要进行了一些小的修正和澄清,修复了 C++98 中的一些错误和不一致性。
  • 编译器兼容性改进:增强了跨平台的兼容性,避免了 C++98 中的一些模糊或不确定的行为。

C++11 (2011年)

C++11 是一个重大更新,带来了大量的新特性,使得 C++ 更加强大和现代化。

  • 自动类型推断(auto:允许编译器根据初始化表达式推断变量类型。
  • 范围-based for 循环:简化了遍历容器的语法。
  • 智能指针:引入了 std::unique_ptrstd::shared_ptr 等智能指针,简化了内存管理。
  • lambda 表达式:支持匿名函数,使得代码更加简洁和灵活。
  • 并发支持:引入了 <thread> 头文件和 std::thread,让 C++ 支持原生线程并行编程。
  • 右值引用和移动语义:引入了右值引用(&&)和 std::move,显著提升了性能,尤其在传递和返回大型对象时。
  • constexpr:支持常量表达式,使得一些计算可以在编译时完成。

C++14 (2014年)

  • 小改进与修复:C++14 主要是对 C++11 的补充和修复,解决了一些问题和改进了一些特性。
  • Lambda 捕获扩展:允许在 lambda 表达式中捕获 *this
  • std::make_unique:引入 std::make_unique 用来创建 std::unique_ptr,避免手动使用 new
  • auto 的推导增强:在某些场景下,auto 可以推导更加复杂的类型。

C++17 (2017年)

C++17 引入了许多实用的功能和语言改进,进一步增强了 C++ 的表现力。

  • 结构化绑定声明:可以将一个元组或者结构体分解为多个变量,例如 auto [x, y] = get_coords();
  • std::optionalstd::variantstd::any:为处理空值、不同类型或不确定类型的值提供了标准库支持。
  • ifswitch 中的初始化语句:允许在 ifswitch 语句中直接声明变量。
  • 并发改进std::shared_mutex 引入了读写锁(读多写少时有效)。
  • std::filesystem:提供了文件系统操作的标准库支持。
  • std::string_view:允许创建非拥有型的字符串视图,避免了不必要的内存复制。

C++20 (2020年)

C++20 是一个具有革命性的更新,带来了许多现代化的特性和语言增强。

  • 概念(Concepts):引入了概念,提供了类型约束机制,让模板编程更安全、可读和可维护。
  • 范围库(Ranges):为处理序列数据提供了更加高效和简洁的方式,可以用 viewaction 等进行链式操作。
  • 模块(Modules):提供了比传统头文件更高效的代码组织方式,减少了编译时间。
  • 协程(Coroutines):支持协程,让异步编程更加简单直观。
  • 三向比较操作符(Spaceship Operator <=>:引入了三向比较符号,简化了比较操作符的定义,尤其在排序时非常有用。
  • constevalconstinit:增强了对常量表达式和常量初始化的支持。
  • std::format:提供了类似 Python 的字符串格式化方法。
  • std::span:提供了一个轻量级的视图类,用于处理数组或容器的子集。

C++23 (2023年)

C++23 继续增强了语言的现代化和开发效率,主要改进包括:

  • 增强的范围库:范围库得到进一步扩展和优化,增加了更多实用的操作符和功能。
  • std::expected:类似于 std::optional,但可以表示期望的结果,包含成功或失败的状态。
  • constexpr 扩展:支持更多的标准库函数和语言特性在编译时计算。
  • 正则表达式改进:引入了更高效和更灵活的正则表达式 API。
  • 提高的标准库支持:增加了更多的标准库函数、算法和容器的优化。

总结

C++ 的每个版本都在逐步提升语言的表达能力、开发效率和执行性能。从 C++98 到 C++20,我们可以看到语言逐步引入了现代编程的诸多特性,如自动化内存管理、并发支持、类型系统改进、以及更易用的标准库。这些特性不仅增强了语言的功能性,也使得 C++ 编程变得更加灵活和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++模板与STL七日斩:从工业编程到高效数据管理(工业项目)

模板如何提升工业代码复用性 实战项目&#xff1a;创建通用【工业设备容器】模板类 类模板的定义与实例化模板参数默认值 #include <iostream> #include <string> using namespace std;template <typename T string> class IndustrialContainer { priva…

sh脚本把服务器B,服务器C目录的文件下载到服务器A目录,添加开机自启动并且一小时执行一次脚本

脚本逻辑 第一次会下载,第二次比较如果有就不下载 文件已存在&#xff1a; 如果目标目录中已经存在同名文件&#xff0c;rsync 会比较源文件和目标文件的大小和修改时间。 如果源文件和目标文件的大小和修改时间完全相同&#xff0c;rsync 会跳过该文件&#xff0c;不会重新下载…

云手机如何进行经纬度修改

云手机如何进行经纬度修改 云手机修改经纬度的方法因不同服务商和操作方式有所差异&#xff0c;以下是综合多个来源的常用方法及注意事项&#xff1a; 通过ADB命令注入GPS数据&#xff08;适用于技术用户&#xff09; 1.连接云手机 使用ADB工具连接云手机服务器&#xff0c;…

透彻理解:方差、协方差、相关系数、协方差矩阵及其应用

最近看了几篇跨领域特征对齐方面的经典文献&#xff0c;学者们搞了很多花样&#xff0c;如有的提出一阶统计特征对齐&#xff0c;有的提出二阶统计特征对齐&#xff0c;有的学者提出高阶统计特征对齐。 通俗而言&#xff0c;就是在统计特征层面对跨域特征进行对齐&#xff0c;…

Unity基础学习(二)

二、Mono中的重要内容 1、延迟函数 &#xff08;1&#xff09;延迟函数定义 延迟执行的函数&#xff0c;可以设定要延迟执行的函数和具体延迟的时间 &#xff08;2&#xff09;延迟函数的使用 #region 1、延迟函数//函数&#xff1a;Invoke(函数名/字符串&#xff0c;延迟时…

20250212:ZLKMedia 推流

1:资料 快速开始 ZLMediaKit/ZLMediaKit Wiki GitHub GitHub - ZLMediaKit/ZLMediaKit: WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11 文档里面提供了各个系…

Holoens2开发报错记录02_通过主机获取彩色和深度数据流常见错误

01.E1696 E1696 无法打开源文件 “stdio.h” 解决方法&#xff1a; 更新一下SDK 1&#xff09;打开Visual Studio Installer&#xff0c;点击修改 2&#xff09;安装详细信息中自己系统对应的SDK&#xff0c;点击修改即可 02.WinError 10060 方法来源 解决方法&#xff1a…

【Qt之QQuickWidget】QML嵌入QWidget中

由于我项目开始使用Widgets,换公司后直接使用QML开发&#xff0c;没有了解过如何实现widget到qml过渡&#xff0c;恰逢面试时遇到一家公司希望从widget迁移到qml开发&#xff0c;询问相关实现&#xff0c;一时语塞&#xff0c;很尴尬&#xff0c;粗略研究并总结下。 对qwidget嵌…

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析&#xff1a;HAL_GPIO_Init 前言 我们终于到达了熟悉的地方&#xff0c;对GPIO的初始化。经过漫长的铺垫&#xff0c;我们终于历经千辛万苦&#xff0c;来到了这里。关于GPIO的八种模式等更加详细的细节&#xff0c;由于只是点个灯&am…

ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?

目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存&#xff0c;第一次接触这个东西是在考研学习408的时候&#xff0c;计算机组成原理里面学习到Cache缓存&#xff0c;用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

vue3的实用工具库@vueuse/core

1.什么是vueuse/core 是一个基于 ‌Vue Composition API‌ 开发的实用工具库&#xff0c;旨在通过封装高频功能为可复用的组合式函数&#xff08;Composables&#xff09;&#xff0c;简化 Vue 应用的开发流程。 提供 ‌200 开箱即用的函数‌&#xff0c;覆盖状态管理、浏览器…

基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 《计算机网络》题库管理系统是一种新颖的考试管理模式&#xff0c;因为系统是用Java技术进行开发。系统分为三个用户进行登录并操作&#xff0c;分别是管理员、教师和学生。教师在系统后台新增试题和试卷&#xff0c;学生进行在线考试&#xff0c;还能对考生记录、错题…

C++初阶——简单实现stack和queue

目录 1、Deque(了解) 1.1 起源 1.2 结构 1.3 优缺点 1.4 应用 2、Stack 3、Queue 4、Priority_Queue 注意&#xff1a;stack&#xff0c;queue&#xff0c;priority_queue是容器适配器(container adaptor) &#xff0c;封装一个容器&#xff0c;按照某种规则使用&#…

第2课 树莓派镜像的烧录

树莓派的系统通常是安装在SD卡上的‌。SD卡作为启动设备,负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性,用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上,在此期间会格式化SD卡,如果SD卡…

【Unity】URP管线Shader编程实例详解 (1) : 漩涡效果shader

作者说 本系列教程适用于有编程基础和图形学基础知识的读者.如果对您有所帮助&#xff0c;请点个免费的赞和关注&#xff0c;您的支持就是我更新最大的动力&#xff01;如果你有任何想看的内容欢迎评论区留言&#xff01;本系列教程Github : https://github.com/Sky0Master/Un…

如何安装vm 和centos

安装 VMware Workstation&#xff08;以 Windows 系统为例&#xff09; 1. 下载 VMware Workstation 打开 VMware 官方网站&#xff08;Desktop Hypervisor Solutions | VMware &#xff09;&#xff0c;在页面中选择适合你系统的版本进行下载。如果你是个人非商业使用&#x…

STM32-心知天气项目

一、项目需求 使用 ESP8266 通过 HTTP 获取天气数据&#xff08;心知天气&#xff09;&#xff0c;并显示在 OLED 屏幕上。 按键 1 &#xff1a;循环切换今天 / 明天 / 后天天气数据&#xff1b; 按键 2 &#xff1a;更新天气。 二、项目框图 三、cjson作用 https://gi…

Wireshark简单教程

1.打开Wireshark,点击最上面栏目里面的“捕获”中的“选项” 2.进入网卡选择界面,选择需要捕获的选择&#xff0c;这里我选择WLAN 3.双击捕获选择出现下面界面 4.点击如下图红方框即可停止捕获 5.点击下图放大镜可以进行放大 6.你也可以查询tcp报文如下图

【Http和Https区别】

概念&#xff1a; 一、Http协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议&#xff0c;客户端通常…