🌞🌞🌞 最新整理, C++ 学习资料,含C++ 11 / 14 / 17 / 20 / 23 新特性、入门教程、推荐书籍、优质文章、学习笔记、教学视频等
C++ 编程语言的历史可以追溯到 1979 年 ,当时 Bjarne Stroustrup 为博士学位论文进行了一些开发。在 Stroustrup 可以使用的所有语言中,有一种被称为 Simula 的语言,顾名思义,它可能是一种主要为仿真而设计的语言。Simula 67 语言是 Stroustrup 使用的变体,被认为是支持面向对象编程范例的主要语言。Stroustrup 发现这种范例对包装开发很有帮助。但是,Simula 语言对于实践和实际使用而言太慢了。
随后不久,Bjarne Stroustrup 希望通过支持面向对象范例来增强 C。他深入研究了 Smalltalk 的 OO 实现,以获取有关实现的想法。但是他不愿意为此放弃性能,因此他开始从事 “C with Classes (带有类的 C)” 的工作,希望 C++ 代码运行时应具有与 C 代码相似(或更好)的性能。
1983 年 ,语言的名称从 “带有类的 C” 更改为 C++。C 语言中的 ++ 运算符是用于递增变量的运算符,它使您可以深入了解 Stroustrup 如何看待该语言。在此期间添加了许多新功能,其中最引人注目的是虚函数,函数重载,带有&符号的引用,const 关键字和使用两个正斜杠的单行注释。
1985 年 ,Stroustrup 出版了名为*“C++ 编程语言” 的书籍*。同年,C++ 被实现为商业产品。该语言尚未正式标准化,因此使该书成为非常重要的参考。该语言在 1989 年再次进行了更新,以包括受保护的成员和静态成员,以及从多个类的继承。
1990 年 ,发行了*《带注释的 C++ 参考手册*》。同年,Borland 的 Turbo C++ 编译器将作为商业产品发布。Turbo C++ 添加了许多其他库,这些库会对 C++ 的开发产生相当大的影响。尽管 Turbo C++ 的最后一个稳定版本是 2006 年,但该编译器仍被广泛使用。
1998 年 ,C++ 标准委员会发布了第一个 C++ ISO / IEC 14882:1998 国际标准,其非正式名称为 C++ 98。据说*《带注释的 C++ 参考手册*》对标准的制定产生了很大的影响。还包括标准模板库,该模板库于 1979 年开始概念开发。2003 年,该委员会对 1998 年标准所报告的多个问题做出了回应,并对其进行了相应的修订。更改的语言称为 C++ 03。
2005 年 ,C++ 标准委员会发布了一份技术报告(称为 TR1),详细介绍了他们计划添加到最新 C++ 标准中的各种功能。新标准被非正式地称为 C++ 0x,因为它有望在第一个十年结束之前的某个时间发布。具有讽刺意味的是,新标准要到 2011 年年中才会发布。直到那时为止,已经发布了几份技术报告,并且一些编译器开始为新功能添加实验性支持。
2011 年中 ,新的 C++ 标准(称为 C++ 11)完成。Boost 库项目对新标准产生了重大影响,其中一些新模块直接来自相应的 Boost 库。一些新功能包括正则表达式支持,全面的随机化库,新的 C++ 时间库,原子支持,标准线程库 ,一种新的 for 循环语法,提供的功能类似于某些其他语言中的 foreach 循环,auto 关键字,新的容器类,对联合和数组初始化列表以及可变参数模板的更好支持。
2014 年 ,C++ 14(也称为 C++ 1y)作为 C++11 的一个小扩展发布,主要功能是错误修复和小的改进,国际标准投票程序草案于 2014 年 8 月中完成,加强 lambda 函数,constexpr 和类型推导特性。
2017 年 ,发布 C17 标准,C17 提供了很多东西。增强了核心语言和库。
2020 年 ,发布 C++20 标准,推出了很多重量级功能,其中比较重要的有:
Concepts:概念改变了我们思考和编程模板的方式。它们是模板参数的语义类别。它们使您可以直接在类型系统中表达您的意图。如果出了什么问题,您会收到清晰的错误消息。
Ranges library:新的 ranges 库使它可以直接在容器上执行算法,用管道符号组成算法,并将其应用于无限数据流。
Coroutines:由于协程,C++ 中的异步编程成为主流。协程是协作任务,事件循环,无限数据流或管道的基础。
Modules:模块克服了头文件的限制。头文件和源文件的分离变得和预处理器一样过时了。最后,我们有更快的构建时间和更轻松的构建软件包的方法。
Concurrency:Atomic Smart Pointers,Joining & Cancellable Threads,The C20 Synchronization Library,增强了 C++ 并发编程能力;
一、基础知识
1、goto 语句(不建议使用)
2、一维数组
3、二维数组
4、函数中的值传递
5、函数的声明
6、函数的分文件编写
7、指针
7.1 指针的基本概念
7.2 指针变量的定义和使用
7.3 指针所占内存空间
7.4 空指针和野指针
7.5 const修饰指针
7.6 指针和数组
7.7 指针和函数
7.8 指针、数组、函数
8、结构体
8.1 结构体基本概念
8.2 结构体定义和使用
8.3 结构体数组
8.4 结构体指针
8.5 结构体嵌套结构体
8.6 结构体做函数参数
8.7 结构体中 const使用场景
二、核心编程
1、内存分区模型
1.1 程序运行前
1.2 程序运行后
1.3 new操作符
2、引用
2.1 引用的基本使用
2.2 引用注意事项
2.3 引用做函数参数
2.4 引用做函数返回值
2.5 引用的本质
2.6 常量引用
3、函数
3.1 函数默认参数
3.2 函数占位参数
3.3 函数重载
Boost.Asio : 用于网络和底层I/O编程的跨平台的C++库。
libev : 功能齐全,高性能的时间循环,轻微地仿效libevent,但是不再像libevent一样有局限性,也修复了它的一些bug。
libevent : 事件通知库
libuv : 跨平台异步I/O。
libco : 协程,微信支持8亿用户同时在线的底层IO库。功能强大
libgo : golang风格的并发框架,C++11实现协程库
f-stack : 腾讯开源的协议栈,基于DPDK的高性能用户态协议栈。
NtyTcp : 单线程的协议栈的,基于netmap,DPDK,rawSocket的实现。
LWIP : 针对 RAM 平台的精简版的 TCP/IP 协议栈实现。
mTCP : 针对多核系统的高可扩展性的用户空间 TCP/IP 协议栈。
4.4BSD : * nix的协议栈是源于4.4BSD的。
Nginx : 一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Lighttpd : 一款开源 Web 服务器软件,安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化。
Libmicrohttpd : GNU软件下的简单c库的Web服务器。API简单,快速。
shttpd : 基于Mongoose的Web服务器框架。
CivetWeb : 提供易于使用,强大的,C/C++嵌入式Web服务器,带有可选的CGI,SSL和Lua支持。
CppCMS : 免费高性能的Web开发框架(不是 CMS).
Crow : 一个C++微型web框架(灵感来自于Python Flask)
Kore : 使用C语言开发的用于web应用程序的超快速和灵活的web服务器/框架。
libOnion : 轻量级的库,帮助你使用C编程语言创建web服务器。
QDjango : 使用C++编写的,基于Qt库的web框架,试图效仿Django API,因此得此名。
Wt : 开发Web应用的C++库。
FMOD : 易于使用的跨平台的音频引擎和音频内容的游戏创作工具。
Maximilian : C++音频和音乐数字信号处理库
OpenAL : 开源音频库—跨平台的音频API
Opus : 一个完全开放的,免版税的,高度通用的音频编解码器
Speex : 免费编解码器,为Opus所废弃
Tonic : C++易用和高效的音频合成
Vorbis : Ogg Vorbis是一种完全开放的,非专有的,免版税的通用压缩音频格式。
bzip2 : 一个完全免费,免费专利和高质量的数据压缩
doboz : 能够快速解压缩的压缩库
PhysicsFS : 对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。
KArchive : 用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。
LZ4 : 非常快速的压缩算法
LZHAM : 无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。
LZMA : 7z格式默认和通用的压缩方法。
LZMAT : 及其快速的实时无损数据压缩库
Minizip : Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。
Snappy : 快速压缩和解压缩
ZLib : 非常紧凑的数据流压缩库
ZZIPlib : 提供ZIP归档的读权限。
Cocos2d-x : 一个跨平台框架,用于构建2D游戏,互动图书,演示和其他图形应用程序。
Grit : 社区项目,用于构建一个免费的游戏引擎,实现开放的世界3D游戏。
lrrlicht : C++语言编写的开源高性能的实时#D引擎
PolyCode : C++实现的用于创建游戏的开源框架(与Lua绑定)。
Armadillo : 高质量的C++线性代数库,速度和易用性做到了很好的平衡。语法和MatlAB很相似
blaze : 高性能的C++数学库,用于密集和稀疏算法。
ceres-solver : 来自谷歌的C++库,用于建模和解决大型复杂非线性最小平方问题。
CGal : 高效,可靠的集合算法集合
CML : 用于游戏和图形的免费C++数学库
Eigen : 高级C++模板头文件库,包括线性代数,矩阵,向量操作,数值解决和其他相关的算法。
GMTL : 数学图形模板库是一组广泛实现基本图形的工具。
GMP : 用于个高精度计算的C/C++库,处理有符号整数,有理数和浮点数。
MOOS-Ivp : 一组开源C++模块,提供机器人平台的自主权,尤其是自主的海洋车辆。
MRPT : 移动机器人编程工具包
PCL : 点云库是一个独立的,大规模的开放项目,用于2D/3D图像和点云处理。
Robotics Library : 一个独立的C++库,包括机器人动力学,运动规划和控制。
RobWork : 一组C++库的集合,用于机器人系统的仿真和控制。
ROS : 机器人操作系统,提供了一些库和工具帮助软件开发人员创建机器人应用程序。
ChaiScript : 用于C++的易于使用的嵌入式脚本语言。
Lua : 用于配置文件和基本应用程序脚本的小型快速脚本引擎。
luacxx : 用于创建Lua绑定的C++ 11 API
SWIG : 一个可以让你的C++代码链接到JavaScript,Perl,PHP,Python,Tcl和Ruby的包装器/接口生成器
V7 : 嵌入式的JavaScript 引擎。
V8 : 谷歌的快速JavaScript引擎,可以被嵌入到任何C++应用程序中。
LibXml++ : C++的xml解析器
PugiXML : 用于C++的,支持XPath的轻量级,简单快速的XML解析器。
RapidXML : 试图创建最快速的XML解析器,同时保持易用性,可移植性和合理的W3C兼容性。
TinyXML : 简单小型的C++XML解析器,可以很容易地集成到其它项目中。
TinyXML2 : 简单快速的C++CML解析器,可以很容易集成到其它项目中。
TinyXML++ : TinyXML的一个全新的接口,使用了C++的许多许多优势,模板,异常和更好的异常处理。
Xerces-C++ : 用可移植的C++的子集编写的XML验证解析器。
含义变化或者新增含义关键字(meaning changed or new meaning added)
Defined in header <type_traits>
显式转换操作符(explicit conversion operators)
追踪返回类型语法(trailing return type syntax)
扩展的friend语法(extended friend syntax)
扩展的整型(extended integer types)
非受限联合体(unrestricted union)
用户定义的字面量(user-defined literals)
强类型枚举(scoped and strongly typed enums)
防止类型收窄(Preventing narrowing)
统一的初始化语法和语义(Uniform initialization syntax and semantics)
一般化的SFINAE规则(generalized SFINAE rules)
Defined in header<type_traits>
Defined in header<utility>
Defined in header<initializer_list>
Defined in header<iterator>
Defined in header <array>
Defined in header <deque>
Defined in header <forward_list>
Defined in header <iterator>
Defined in header <list>
Defined in header <map>
Defined in header <regex>
Defined in header <set>
Defined in header <span>
Defined in header <string>
Defined in header <string_view>
Defined in header <unordered_map>
Defined in header <unordered_set>
Defined in header <vector>
含义变化或者新增含义关键字(meaning changed or new meaning added)
Defined in header<type_traits>
Defined in header<utility>
Defined in header<tuple>
Defined in header<optional>
Defined in header<variant>
Defined in header<any>
Defined in header<charconv>
Defined in header<initializer_list>
Defined in header<map>
Defined in header<unordered_map>
Defined in header <array>
Defined in header <deque>
Defined in header <forward_list>
Defined in header <iterator>
Defined in header <list>
Defined in header <map>
Defined in header <regex>
Defined in header <set>
Defined in header <span>
Defined in header <string>
Defined in header <string_view>
Defined in header <unordered_map>
Defined in header <unordered_set>
Defined in header <vector>
含义变化或者新增含义关键字(meaning changed or new meaning added)
Defined in header<type_traits>
Defined in header<coroutine>
Defined in header<compare>
Defined in header<concepts>
Defined in header<utility>
Defined in header<memory>
Defined in header<concepts>
Defined in header<memory>
Defined in header<chrono>
Defined in header<string>
Defined in header<string_view>
Defined in header<cuchar>
Defined in header<array>
Defined in header<vector>
Defined in header<map>
Defined in header<unordered_map>
Defined in header<span>
Defined in namespace std::ranges
Defined in header
Defined in header
Defined in header <array>
Defined in header <deque>
Defined in header <forward_list>
Defined in header <iterator>
Defined in header <list>
Defined in header <map>
Defined in header <regex>
Defined in header <set>
Defined in header <span>
Defined in header <string>
Defined in header <string_view>
Defined in header <unordered_map>
Defined in header <unordered_set>
Defined in header <vector>
Defined in header <ranges>
Defined in header <iterator>
Defined in namespace std::ranges
Defined in header<type_traits>
Defined in header<utility>
Defined in header<stacktrace>
Defined in header<memory>
Defined in header<string>
Defined in header<string_view>
零声教育,专注于c/c++Linux后台服务器开发架构技术学习提升。
每天晚上8点【免费技术直播】:分享Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习。
关注微信公众号【后台服务架构师】——【联系我们】,获取本repo最全PDF学习文档!