C++11 14 17 20 23进化史

news2024/11/17 3:46:56

C++11、C++14、C++17、C++20和C++23是C++语言标准的不同版本,它们之间在功能、特性和语法上存在一些区别。以下是对这些版本主要区别的概述:

C++11

C++11是C++语言的一个重要标准,引入了大量新特性和改进,使C++变得更加易用和强大。主要特性包括:

  • 自动类型推导(auto):可以根据初始化表达式自动推导变量的类型。
  • 统一的初始化语法:可以使用花括号{}来初始化对象,无论是基本类型、数组、类对象还是容器。
  • 右值引用和移动语义:引入了&&符号,支持绑定到临时对象(右值),实现了资源的高效转移,避免不必要的拷贝操作。
  • Lambda表达式:可以在代码中定义匿名函数,简化函数对象的创建和使用。
  • 多线程支持:引入了多线程编程的支持,包括线程、互斥锁、条件变量等。
  • 标准库的增强:包括智能指针、正则表达式库、新的容器类型(如unordered_maparray)等。

C++14

C++14是对C++11标准的一个较小但重要的补充和改进,主要特性包括:

  • Lambda初始化捕获:支持在捕获列表中直接初始化捕获的变量。
  • 泛型Lambda表达式:参数可以使用auto关键字进行自动类型推导。
  • constexpr函数的改进:允许在constexpr函数体内使用更复杂的控制流结构和局部变量声明。
  • 废弃标志[[deprecated]]:用于标记已弃用的函数、类或其他声明,以在编译时发出警告。
  • 线程支持库的扩展:引入了std::shared_timed_mutexstd::shared_lock,支持共享(读)锁定和独占(写)锁定。

C++17

C++17进一步扩展了C++的功能和特性,主要包括:

  • 结构化绑定:允许从元组、结构体或数组等复合类型中直接解包出成员。
  • if constexpr:允许在编译时进行条件编译,提高模板元编程的灵活性。
  • 内联变量:可以直接在头文件中定义全局变量,避免多次定义的问题。
  • Lambda表达式可以捕获*this:捕获当前对象的拷贝,确保在对象释放后,lambda表达式能安全地调用其成员和方法。
  • 标准库的扩充:新增了std::variantstd::optionalstd::anystd::string_view等类型。

C++20

C++20是C++语言发展的一个重要里程碑,引入了许多现代化编程特性,如:

  • 概念(Concepts):对模板参数进行约束和限制,提高模板编程的易用性和安全性。
  • 区间(Ranges):统一处理序列操作,如过滤、转换等,简化容器操作。
  • 协程(Coroutines):简化异步编程模型的工具,使得编写异步代码更加直观和方便。
  • 模块系统:虽然C++20标准中没有完全实现,但为未来的模块系统奠定了基础。

C++23

C++23是C++语言标准的最新版本(截至当前时间),预计特性包括:

  • 增强的模块系统:进一步完善C++的模块系统,提高编译速度和代码封装性。
  • 数学库扩展:可能包括新的数学函数和算法,以支持更复杂的数学计算。
  • 网络库扩展:可能引入新的网络编程特性,简化网络应用的开发。

需要注意的是,每个C++版本都包含更多的细节和功能,这里仅列出了一些主要的特性和改进。具体使用哪个版本取决于项目需求、编译器支持以及个人偏好。

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

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

相关文章

Qt工程使用MQTT-C库与mqtt服务器数据通信

实现mqtt订阅与发布话题,与mqtt服务器进行数据通信 编译环境:Qt5.15.2 vs2019 需要mqttc库:mqttc.lib, mqttc.dll(根据MQTT-C源码编译出来的库,参考cmake编译MQTT-C源码-CSDN博客) 一、Qt pro文件编写 …

android kotlin 基础复习 继承 inherit

1、新建文件kt 2、代码: /**用户基类**/ open class Person1(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")println("name:${name},age:${age}")} }/**子…

信息安全工程师(1)计算机网络分类

一、按分布范围分类 广域网(WAN): 定义:广域网的任务是提供长距离通信,运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域,因此也被称为远程网。特点:连接广域网的各个结点…

计算机毕业设计 财会信息管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【吊打面试官系列-Redis面试题】怎么理解 Redis 事务?

大家好,我是锋哥。今天分享关于【怎么理解 Redis 事务?】面试题,希望对大家有帮助; 怎么理解 Redis 事务? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1)事务是一个单独的隔离操作&#xff1…

【LabVIEW学习篇 - 22】:ActiveX

文章目录 ActiveXActiveX打开Windows颜色选择对话框ActiveX将浏览器嵌入到前面板 ActiveX ActiveX是微软推出的一个开放的技术集的统称,它是很早之前出现的OLE(object linking and Embedding)技术的扩展,它是基于COM(Component Object Model)技术而建立…

meta元素

1&#xff0c;meta元素有4个全局属性 charset 设置文档的编码类型&#xff0c;通常设置为utf-8 <meta charset"utf-8" /> content 配合name或者http-equiv属性使用&#xff0c;为其value、 name 元数据名称(name的值)说明application name当前页所属Web应用系…

进程替换篇

文章目录 目录 前言 1.进程替换概念 2.进程替换的原理 3.进程替换的接口 4.接口功能验证 ①execl接口演示 ②execlp接口演示 ③execle接口演示 ④execv接口验证 5.尝试写一个自己的shell【了解】 前言 你一定见过类似于这样的“黑框框”&#xff0c;这个“黑框框”其实就是…

js 请求api + 解析数据 2个例子

起因&#xff0c; 目的: 补补 js 基础。 例1&#xff0c; 请求天气 api&#xff0c; 天气数据api js 中的 await await 关键字只能在 async 函数内部使用。函数内部可以使用 await&#xff0c;但是在函数外部直接使用 await 是不允许的。 async function fetchWeatherData…

[mysql]最基本的SELECT...FROM结构

第0种&#xff1a;最基本的查询语句 SELECT 字段名&#xff0c;字段名 FROM 表名 SELECT 1&#xff1b; SELECT 11,3*2&#xff1b; FROM SELECT 11,3*2 FROM DUAL&#xff1b;#dual&#xff1a;伪表 我们可以用它来保持一个平衡 这里我们的值不需要在任何一个表里&#xf…

MyBaits的初理解

一.Mybaits的简介 Mybaits就是对JDBC的简化&#xff0c;就是对持久化的实现。 二.基础 需要导的dependencies <dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId>&l…

第 5 章多视图几何

本章讲解如何处理多个视图&#xff0c;以及如何利用多个视图的几何关系来恢复照相机位置信息和三维结构。通过在不同视点拍摄的图像&#xff0c;我们可以利用特征匹配来计算出三维场景点以及照相机位置。本章会介绍一些基本的方法&#xff0c;展示一个三维重建的完整例子&#…

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容&#xff0c;去掉首尾空格、去掉空字符串&#xff0c;解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

Qt | ubuntu20.04安装Qt6.5.3并创建一个example完整教程(涉及诸多开发细节,商用慎重)

点击上方"蓝字"关注我们 01、下载 >>> 下载Qt在线安装包 这里采用镜像地址进行下载,避免网络过慢。 镜像地址:http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.5/ 选择最新版本下载,如截至目前最新版本为qt-unified-linux-x64-4.5.2…

“探索数字孪生技术:细数其在各行业的实际应用场景“

数字孪生城市是指在数字世界中创建一个同物理实体城市外观一致、行动一致、思想一致的 数字虚拟城市&#xff0c;实现对现实世界的监测、诊断、回溯、预测和决策控制&#xff0c;用于实体城市的规划、建设、 治理和优化等全生命周期管理&#xff0c;提高城市运行效率和市民居住…

内网穿透的应用-Deepin系统安装x11vnc实现任意设备无公网IP远程连接Deepin桌面

文章目录 前言1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 前言 本文主要介绍在Deepin系统中安装x11vnc工具&#xff0c;并结合Cpolar内网穿透工具实现任意设备无公网IP也可…

计算机毕业设计Pyhive+Spark招聘可视化 职位薪资预测 招聘推荐系统 招聘大数据 招聘爬虫 大数据毕业设计 Hadoop Scrapy

《SparkHive招聘推荐与预测系统》开题报告 一、引言 随着互联网技术的飞速发展&#xff0c;招聘行业积累了大量的数据&#xff0c;包括职位信息、应聘者信息、企业信息等。这些数据中蕴含着丰富的价值&#xff0c;能够帮助企业和求职者更好地匹配&#xff0c;提高招聘效率。然…

浮点数精度问题

为什么会产生精度问题&#xff1f; 我们带着这个问题去探寻浮点数二进制的存储原理 浮点数是怎么存在计算机中的&#xff1f; 浮点数在计算机中的表示通常遵循IEEE 754标准。其基本概念如下&#xff1a; 结构&#xff1a;浮点数由三部分组成&#xff1a; 符号位&#xff08;…

Android主副屏显示-Android13

Android主副屏显示-Android13 1、DisplayDeviceInfo屏幕信息2、LogicalDisplay.java2.1 configureDisplayLocked刷新 DisplayManagerService启动及主屏添加-Android13 1、DisplayDeviceInfo屏幕信息 DisplayManagerService启动及主屏添加-Android13 中监听获取&#xff0c;在L…

Vue3+ElementPlus 封装图片空间组件的门面

什么是图片空间? 图片空间就是专门管理我们上传图片的地方。就好比用户管理一样&#xff0c;我们对要上传的图片进行管理。 这样做的好处有哪些&#xff1f; 我们把可能需要的图片都上传到图片管理中。在其他需要图片的地方&#xff08;如&#xff1a;商品图片等&#xff09;可…