现代C++基本介绍

C++标准 C++标准是C++编程语言的规范,由国际标准化组织(ISO)制定。C++标准的发展历程可以追溯到1998年,当时ISO/IEC 14882:1998标准被发布,这是第一个C++标准,常被称为C++98。随后,C++标准经历了多次更新和修订,包括C++03(2003年)、C++11(2011年)、C++14(2014年)和C++17(2017年)。最新的C++标准是C++20,于2020年发布,引入了许多新特性,如概念(concepts)、范围库(ranges)、协程(coroutines)等。 阅读详情

1、C++相关组织和网站

ISO(International Organization for Standardization)
ISO是国际标准化组织,负责当今世界上多数领域(包括军工、石油、船舶等垄断行业)的标准化活动,通过2856个技术结构(含技术委员会611个、工作组2022个、特别工作组38个)开展技术活动。
C++标准委员会(ISO/IEC JTC1/SC22/WG2112)
C++标准也是由ISO负责的。C++标准委员会的正式名称是 ISO/IEC JTC1/SC22/WG2112,它是 ISO/IEC JTC1/SC22 下属的一个工作组,专门负责制定和维护C++语言标准。它成立于1990-91年,由来自不同国家的专家组成。它每年会举行多次会议,讨论和审查关于C++标准的提案和草案。C++标准委员会没有一个单独的官方网站。
isocpp
一个用于推广和支持C++标准化工作的网站,它由一个非营利性组织(Standard C++ Foundation)提供。它包含了一些关于C++标准的新闻、状态、讨论、文章、书籍、事件、培训和产品的信息。它也有一些链接到其他有关C++标准的网站,比如 C++参考文档、在线编译器等。它不是一个官方的网站,但是它与C++标准委员会有密切的合作关系。
open-std
一个用于存放一些开放标准的网站,它由丹麦技术大学(DTU)赞助。它包含了一些ISO/IEC JTC1下属的子委员会和工作组的网页,比如SC2、SC22、SC34等。其中,SC22/WG21就是C++标准委员会的网页,你可以在那里找到关于C++标准的一些信息,比如最新的草案、 已发布的标准、问题列表等。
cppreference
C++参考文档 网站,提供了C和C++语言的参考资料。它包含了语言的基本概念、关键字、预处理器、表达式、声明、初始化、函数、语句、类、重载、模板和异常等内容,以及标准库的头文件、命名要求、特性测试宏和各种库函数和类。它还提供了不同版本的C和C++标准(如C++98, C++11, C++20等)的 编译器支持情况。
cplusplus
关于C++语言的网站。提供了C++语言的 教程,从基础知识到C++11引入的新特性都有涵盖。而且有配套示例程序,在学习完后可以立刻着手练习。此外,该网站还提供标准C++库的 参考资料。

2、什么是现代C++

什么是现代C++(Modern C++)?
所谓现代C++,就是指 C++11 及之后的 C++(C++ 11/14/17/20/23/…),大量引入的新的语言特性和库功能使得C++感觉像一门新的语言。
  • 历代C++标准发布时间:

    • C++98:1998年09月01日
    • C++03:2003年10月15日
    • C++11:2011年09月01日
    • C++14:2014年08月18日
    • C++17:2017年12月01日
    • C++20:2020年12月18日
    • C++23:制定中,预计2023年底发布
    • C++98是C++标准的第一个版本,其定义了语言的基本构造、STL和标准库。而C++03只是在C++98的基础上修正了一些错误和不一致,并没有引入什么新的语言特性或库功能,所以有时候可能会将它们看作同一个C++标准(称为"C++98/03")。
    • 而C++11是一次非常大的升级,引入了很多新的语言特性和库功能,使得C++感觉像一门新的语言。这些特性需要经过长期的设计、讨论、测试和反馈,才能达到标准委员会的要求。而且,由于C++是一门非常复杂和灵活的语言,要保证与之前版本的兼容性和一致性也是一个巨大的挑战。所以,C++03之后时隔八年才发布新的C++11标准。

3、C++标准之间的关系

  • C++标准之间的关系是,每一个新的标准都是在前一个标准的基础上进行修改和扩展的。也就是说,C++20包含了C++17以及之前所有C++标准的内容,但是也可能有一些变化和废弃的特性。

  • 也就是说,在C++20中,我们仍然可以找到最简单、最基本的标准,比如"int、char、bool"等基本数据类型之类的标准。

  • 也就是说,C++11的新特性,到了C++14中就算不上新特性了(成为已有特性);C++14的新特性,到了C++17中就算不上新特性了(成为已有特性);往后亦是如此。

  • 当编译器不支持C++新特性而去使用该特性时会导致编译错误,所以我们有必要了解自己的C++编译器对C++标准和特性的支持。


4、相关链接


5、后记

  • 学习现代C++,我们不仅需要在掌握基本C++入门的基础上继续学习历代C++标准的新特性,还需要了解现代C++的编程范式和风格,比如:

    1. 优先使用 STL(标准模板库)中的容器和算法,而不是裸指针和手动循环。
    2. 优先使用智能指针(如 unique_ptr、shared_ptr 等)来管理动态分配的资源,而不是手动调用 new 和 delete。
    3. 优先使用 auto 关键字来推导变量的类型,而不是显式地指定类型。
    4. 优先使用 lambda 表达式来定义简单的函数对象,而不是传统的函数指针或仿函数类。
    5. 优先使用 constexpr 关键字来定义编译期常量和函数,而不是运行期常量和函数。
    6. 优先使用模板元编程(template metaprogramming)或概念(concepts)来实现通用编程(generic programming),而不是宏或继承。
    7. …
  • 🔔 在继续学习现代C++之前,您需要确保您已具备C++基础;您可以参考笔者的面向对象程序设计(基础)专栏了解C++基础的相关内容。
C++ 标准委员会 国际C++标准委员会 C++作为一种开源且广泛应用的编程语言 标准的作用 委员会的组织 委员会的结构对 C++ 设计的影响 国际C++标准委员会,正式名称为ISO/IEC JTC1/SC22/WG21,确实是C++语言发展的重要推手。这个组织自1991年成立以来,一直在推动C++标准的制定和演进。在此之前,C++的开发工作主要由美国国家标准学会(ANSI)的C++标准委员会负责。C++作为一种开源且广泛应用的编程语言,没有特定的资金提供来源或所有者,因此其发展在很大程度上依赖于企业开发、开源项目以及社区的努力。对于来自不同组织和公司的开发者来说,WG21和各国的标准委员会成为了他们共同讨论、解决问题和推动C++发展的平台。 阅读详情

相关推荐

现代C++21-thread和future:领略异步中的未来

编译期的烧脑我们先告个段落,今天我们开始讲一个全新的话题——并发(concurrency)。

qq_53280238的博客 1000

深入探索C++17文件系统库:std::filesystem全面解析

在 C++17 之前,C++ 标准库缺乏对文件系统进行操作的原生支持,开发者通常依赖于操作系统特定的 API 或第三方库。这导致代码的可移植性差,且容易出错。C++17 引入了 `std::filesystem` 库,为文件和目录操作提供了一种跨平台、类型安全且易于使用的方式。本文将深入探讨 `std::filesystem` 库的各个方面,包括路径操作、文件操作、目录操作以及一些高级用法,并提供丰富的示例代码,帮助你快速掌握这个强大的工具。

专注Rust编程与技术分享,涵盖C++、Python等开发实战,新手友好,专注实战,助力编程成长。 1万+

你应该立即掌握的10个现代C++新特性

你应该立即掌握的10个现代C++新特性_哔哩哔哩_bilibili 委托构造函数 一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程, 在委托构造函数内,成员初始值列表只有一个唯一的入口, 就是类名本身(就是同类的其他构造函数的类名)。类名后面的参数列表必须与类中另外一个构造函数匹配。 class Date { public: //非委托构造函数使用对应的实参初始化成员 Date(int year, int month, int day) :_year(year) ..

usstmiracle的博客 3844

【现代C++开发】使用现代的C++快速开发一款串口读写软件

最近关于C++闹出来的动静态势挺大的,主要是由于爱美丽卡开始抵制C++,最近有不少文章都报道了这件事,比如即使C++到了这个时候,C++也还是值得学习的,起码不管你用起来体验怎么样,反正我开发的爽。现阶段仍然有很多地方都是用C++写的,因此还是需要用到的,尽管现在都开始使用Rust来代替C++了,但Rust的别扭也是众所周知的,在Rust中文社区就看到不少人因此选择放弃Rust转回C++了(反正不可能是我,我C++主要还是嵌入式和玩)。

专注Rust编程与技术分享,涵盖C++、Python等开发实战,新手友好,专注实战,助力编程成长。 1万+

1、利用 RxCpp 库和现代 C++17 设计并发与异步应用

本文介绍了使用现代C++17和RxCpp库设计并发与异步应用程序的核心概念与实践。涵盖了反应式编程的基础知识,包括可观察对象、观察者、操作符和调度器等关键元素,并结合现代C++特性如lambda函数、智能指针、移动语义等进行深入讲解。文章还介绍了事件驱动编程模型、语言级并发机制、线程管理、数据同步以及使用Qt和MFC进行反应式GUI编程等内容。通过实例演示了如何使用RxCpp库进行数据流处理、错误处理、自定义操作符创建以及反应式微服务的开发。适合希望掌握反应式编程范式、提升异步和并发编程能力的C++开发者。

fff88的博客 85

C++的SQLite ORM库:现代C++的纯头文件库

SQLite是一个轻量级的数据库,它将全部内容存储在一个单一的跨平台磁盘文件中。由于其不需要单独的服务器进程或系统来运行,因此被广泛用于小型应用和嵌入式系统中。它的简单性、零配置和可移植性让它成为学习数据库和快速原型开发的理想选择。ORM(对象关系映射)技术是数据库编程中的一种设计模式,旨在减少数据库操作的复杂性。通过ORM,开发者可以使用面向对象编程语言来操作数据库,而无需编写复杂的SQL语句。这不仅提高了代码的可读性和可维护性,还可以在很大程度上减少数据库访问的代码量。

weixin_30248619的博客 1698

SQLite Modern CPP 教程

**SQLite Modern CPP** 是一个轻量级的C++库,它为SQLite C API提供了简洁的包装,使得与SQLite数据库的交互更为简单和高效。这个库旨在通过提供现代C++14特性,如流式SQL操作、Lambda表达式支持以及异常处理,来简化数据库操作。 ### 主要特点 - **头文件库**:只需要包含对应的头文件,无需额外编译或链接库。 - **流式SQL**:使用IO操作符...

gitblog_00256的博客 582

C++ Primer 5th中文版:掌握C++基础与现代特性

C++作为一种强大的编程语言,其根源可以追溯到1979年,Bjarne Stroustrup在贝尔实验室开发的一种名为“C with Classes”的编程语言。这个新语言在C语言的基础上增加了面向对象的特性,包括类和继承的概念。1983年,该语言被正式命名为C++,标志着其作为一种独立编程语言的诞生。随着时间的发展,C++经历了多次重要的修订和更新,逐渐演变成今天我们所熟知的版本。

weixin_36328210的博客 846

h5cpp 库介绍与使用指南

h5cpp 是一个用于操作 HDF5 文件的 C++ 库,它提供了比原生 HDF5 C 接口更现代化、更符合 C++ 习惯的 API。HDF5(Hierarchical Data Format version 5)是一种用于存储和组织大量科学数据的文件格式。h5cpp 为 HDF5 文件操作提供了更现代化的 C++ 接口,简化了开发过程同时保持了 HDF5 的强大功能。通过类型安全的 API 和简化的语法,它使得在 C++ 中处理科学数据变得更加容易和高效。

weixin_42849849的博客 973

ComfyUI 的 LoRA 训练:素材打标签与调优全攻略

标签是 LoRA 训练的"地基"——地基打不牢,后续调参再精细也难出好效果。记住:标签要"少而精",聚焦独特点,用触发词控效果。下一篇我们将讲解参数设置,让你的优质标签发挥最大价值~

2301_78150483的博客 3093

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

c++的enum介绍

枚举是C++中用于定义命名常量集合的重要特性,经历了从C风格枚举到C++强类型枚举的演进。现代C++枚举提供了比C风格枚举更安全、更灵活的特性,是定义常量集合的首选方式。enum class Color { // 使用class或struct关键字。enum : unsigned char { // 指定底层类型。2. **作用域隔离**:枚举常量不会污染外层作用域。1. **优先使用`enum class`**2. **为业务逻辑相关的常量集合使用枚举**1. **强类型**:不会隐式转换为整数。

m0_70984261的博客 395

2023-ICCV-隐式神经网络实现低光照图像增强(NeRCo)论文解读+代码解析

NeRCo()提出了一种名为NeRCo的隐式神经表示方法,用于合作式低光图像增强。现有的低光图像增强方法存在以下三个限制:不可预测的亮度降低和噪声、度量友好版本和视觉友好版本之间的固有差距,以及有限的配对训练数据。为了解决这些限制,论文提出了NeRCo方法,它以无监督的方式稳健地恢复感知友好的结果。具体而言,NeRCo通过一个可控的拟合函数统一了现实场景中多样的退化因素,从而提高了鲁棒性。对于输出结果,论文引入了来自预训练视觉-语言模型的先验信息,采用语义导向的监督方法。

weixin_45595504的博客 3179

C++ 现代编程风格速查表

栈上数组// naive: int arr[10]; memset(arr, 0, sizeof(a));// modern: // #include <array> std::array<int, 10> arr; arr.fill(0);堆上数组// naive: int *arr = new int[10]; memset(arr, 0, 10 * sizeof(int));// modern

龙哥盟 4万+

数据可视化—power bi 基础操作汇总

数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 .

weixin_52730784的博客 2670

杰理SDK入门教程(五):按键使用配置

摘要 杰理SDK提供IO按键和AD按键两种方案。IO按键通过GPIO电平检测实现,配置时需要设置板级宏定义和硬件连接,默认使用PB1引脚。AD按键基于ADC电压采样,通过电阻分压区分按键,需配置功能使能、硬件通道和键值适配。按键功能通过修改SDK中的key_table文件实现。两种方案适用于不同硬件场景,开发者可根据需求选择。

qq_42014563的博客 771

C++ 的基本语法

Car(std::string b, int y) : brand(b), year(y) {} // 构造函数。// 输出: Brand: Toyota, Year: 2020。int main() { // 主函数,程序入口。

a11hdeg的博客 925

SCADA|KingSCADA通过组合框选择修改变量的值

《SCADA项目中组合框控件的使用方法》 本文详细介绍了SCADA系统中组合框(下拉框)控件的应用方法。通过具体示例演示如何实现:当选择"雷工笔记"时变量值为100,选择"雷工杂谈"时为200,选择"小李食代"时为300的功能。主要实现步骤包括:1)创建项目并添加组合框控件;2)设置Items选项及对应数值;3)创建内存变量;4)使用GetCurrentIndex()和GetItemData()方法;5)在选项变化事件中编写脚本。该控件在SCADA

做有价值的事,积累有价值的笔记! 850

用现代 C++ 写一个高性能的服务器

在上篇文章中提到原作者曾在一天内就凭借 Facebook 的 Wangle 搭建起一个数据库引擎的原型,在这里我会解释我是如何做到的。到本文最后,你将可以用Wangle编写出一个高性能的C++服务器。本文也将作为教程整合进 Wangle 的 ReadMe.md 中。 我将展示如何使用现代C++编写一个Echo服务器,相当于分布式系统开发中的“Hello World”。这个服务器会将接收的消息直接...

732

《多模态融合改进》目录一览 | 专栏介绍 :全网 第一份 完整的多模态改进教程,提供《多模态模型改进完整项目包》-开箱即用

在大家订阅专栏后,便可获得多模态模型改进完整项目包-开箱即用,方便简单

Limiiiing的博客 1万+

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3543

深入理解 C++ SFINAE:从编译技巧到现代元编程的演进

这是一篇关于 C++ SFINAE 技术的详细博客文章。我们将从基本概念出发,逐步深入到高级用法和现代替代方案。

牟同學的博客 886

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++编程入门:从零开始学习现代C++

通过本文的学习,你已经:✅了解了C++的发展历程和优势• 掌握了C++的主要应用领域• 理解了C++的发展历程✅搭建了C++开发环境• 安装了VS Code和C++扩展• 配置了编译器• 创建了第一个项目✅掌握了基本的语法结构• 理解了程序的基本结构• 学会了各种数据类型的声明• 掌握了变量初始化方法✅编写了第一个C++程序• 创建了功能完整的计算器• 学会了编译和运行程序• 掌握了基本的调试技巧✅学会了错误处理• 识别常见的编译错误• 处理运行时错误• 编写健壮的程序。

2501_93283929的博客 392

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

auto在现代C++中的正确用法,你真的掌握了吗?

掌握auto的类型推导规则,提升代码简洁性与性能。详解auto在变量声明、迭代器、Lambda表达式中的正确用法,揭示其基于初始化表达式的类型推导机制。避免常见误区,实现高效现代C++编程,值得收藏。

LearnFlow的博客 469

C++ 基本语法

C++ 基本语法》五万字深度解析涵盖C++核心知识:从最小程序框架(含 #include、main 函数)、注释规范,到数据类型(如 int、double、bool 及其范围)、变量声明(含 auto、引用);详解运算符优先级、位运算,控制结构(if-else、switch、循环优化);面向对象(类、继承、多态)、异常处理(try-catch、自定义异常);STL 容器(如 vector、list)与算法(如 sort、find);现代 C++ 特性(右值引用、移动语义、Lambda 表达式);

正在在摸鱼的博客 232

现代C++特性(一):基本数据类型扩展

C++基础数据类型包括整型(int/short/long等)、浮点型(float/double)、字符型(char)和布尔型(bool),各类型具有不同的位宽和取值范围。C++11新增long long类型,并引入numeric_limits模板查询类型极限值。

qq_39281631的博客 511
上一篇: 在 Winform 上显示 CAD 三维模型
下一篇: (一)「消息队列」之 RabbitMQ 入门
YMGogre
博客等级 码龄8年 253粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值