C++ Tutorial¶
C++ 发展历程¶
- 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++ 并发编程能力;
书籍推荐¶
文章推荐¶
C++ 入门教程(41课时) - 阿里云大学¶
推荐学习的CPP网站¶
github开源项目推荐¶
工程中使用到的C++技能¶
Linux工具快速教程¶
框架¶
Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合
ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库。
Boost : 大量通用C++库的集合。
BDE : 来自于彭博资讯实验室的开发环境。
Cinder : 提供专业品质创造性编码的开源开发社区。
Bxxomfort : 轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。
Dlib : 使用契约式编程和现代C++科技设计的通用的跨平台的C++库。
EASTL : EA-STL公共部分
ffead-cpp : 企业应用程序开发框架
Folly : 由Facebook开发和使用的开源C++库。
JUCE : 包罗万象的C++类库,用于开发跨平台软件
libphenom : 用于构建高性能和高度可扩展性系统的事件框架。
LibSourcey : 用于实时的视频流和高性能网络应用程序的C++11 evented IO
Loki : C++库的设计,包括常见的设计模式和习语的实现。
MiLi : 只含头文件的小型C++库
openFrameworks : 开发C++工具包,用于创意性编码。
Qt : 跨平台的应用程序和用户界面框架
Reason : 跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。
ROOT : 具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。
STLport : 是STL具有代表性的版本
STXXL : 用于额外的大型数据集的标准模板库。
Ultimate++ : C++跨平台快速应用程序开发框架
Windows Template Library : 用于开发Windows应用程序和UI组件的C++库
Yomm11 : C++11的开放multi-methods.
异步事件循环¶
网络库¶
ACE : C++面向对象网络变成工具包
Casablanca : C++ REST SDK
cpp-netlib : 高级网络编程的开源库集合
libCurl : 多协议文件传输库
Mongoose : 非常轻量级的网络服务器
Muduo : 用于Linux多线程服务器的C++非阻塞网络库
net_skeleton : C/C++的TCP 客户端/服务器库
POCO : 用于构建网络和基于互联网应用程序的C++类库,可以运行在桌面,服务器,移动和嵌入式系统。
RakNet : 为游戏开发人员提供的跨平台的开源C++网络引擎。
Tufao : 用于Qt之上的C++构建的异步Web框架。
WebSocket++ : 基于C++/Boost Aiso的websocket 客户端/服务器库
ZeroMQ : 高速,模块化的异步通信库
TCP/IP协议栈¶
WEB应用框架¶
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++库。
标准库,算法与函数¶
C++ Standard Library : 是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。
Standard Template Library : 标准模板库, STL
ISO C++ Standards Committee : C++标准委员会
音频库¶
生态学¶
lisequence : 用于表示和分析群体遗传学数据的C++库。
SeqAn : 专注于生物数据序列分析的算法和数据结构。
Vcflib : 用于解析和处理VCF文件的C++库
Wham : 直接把联想测试应用到BAM文件的基因结构变异。
压缩¶
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归档的读权限。
并发性¶
密码学¶
Bcrypt : 一个跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系统和处理器中。
BeeCrypt : 快速的加密图形库,功能强大,接口方便。
Botan : C++加密库
Crypto++ : 一个有关加密方案的免费的C++库
GnuPG : OpenPGP标准的完整实现
GnuTLS : 实现了SSL,TLS和DTLS协议的安全通信库
Libgcrypt : 基于GnuPG的加密图形库。
Libmcrypt : 线程安全,提供统一的API。
LibreSSL : 免费的SSL/TLS协议,属于2014 OpenSSL的一个分支
LibTomCrypt : 一个非常全面的,模块化的,可移植的加密工具
libsodium : 基于NaCI的加密库,固执己见,容易使用
Nettle : 底层的加密库
OpenSSL : 一个强大的,商用的,功能齐全的,开放源代码的加密库。
数据库¶
调试¶
Boost.Test : Boost测试库
Catch : 一个很时尚的,C++原生的框架,只包含头文件,用于单元测试,测试驱动开发和行为驱动开发。
CppUnit : 由JUnit移植过来的C++测试框架
GoogleTest : 谷歌C++测试框架
ig-debugheap : 用于跟踪内存错误的多平台调试堆
MemTrack : 用于C++跟踪内存分配
MicroProfile : 跨平台的网络试图分析器
UnitTest++ : 轻量级的C++单元测试框架
容器¶
C++ B-Tree : 基于B树数据结构,实现命令内存容器的模板库
Hashmaps : C++中开放寻址哈希表算法的实现
游戏引擎¶
图形库¶
图像处理¶
国际化¶
Json库¶
frozen : C/C++的Jason解析生成器
Jansson : 进行编解码和处理Jason数据的C语言库
jbson : C++14中构建和迭代BSON data,和Json 文档的库
JeayeSON : 非常健全的C++ JSON库,只包含头文件
JSON++ : C++ JSON 解析器
json-parser : 用可移植的ANSI C编写的JSON解析器,占用内存非常少
json11 : 一个迷你的C++11 JSON库
jute : 非常简单的C++ JSON解析器
ibjson : C语言中的JSON解析和打印库,很容易和任何模型集成
libjson : 轻量级的JSON库
PicoJSON : C++中JSON解析序列化,只包含头文件
Qt-Json : 用于JSON数据和 QVariant层次间的相互解析的简单类
QJson : 将JSON数据映射到QVariant对象的基于Qt的库
RepidJSON : 用于C++的快速JSON 解析生成器,包含SAX和DOM两种风格的API
日志¶
Boost.Log : 设计非常模块化,并且具有扩展性
easyloggingpp : C++日志库,只包含单一的头文件。
Log4cpp : 一系列C++类库,灵活添加日志到文件,系统日志,IDSA和其他地方。
templog : 轻量级C++库,可以添加日志到你的C++应用程序中
机器学习,人工智能¶
btsk : 游戏行为树启动器工具
Evolving Objects : 基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。
Caffe : 快速的神经网络框架
CCV : 以C语言为核心的现代计算机视觉库
mlpack : 可扩展的C++机器学习库
OpenCV : 开源计算机视觉库
Recommender : 使用协同过滤进行产品推荐/建议的C语言库。
SHOGUN : Shogun 机器学习工具
sofia-ml : 用于机器学习的快速增量算法套件
数学库¶
多媒体库¶
物理学¶
机器人学¶
脚本¶
序列化¶
Cap’n Proto : 快速数据交换格式和RPC系统。
cereal : C++11 序列化库
FlatBuffers : 内存高效的序列化库
MessagePack : C/C++的高效二进制序列化库,例如 JSON
ProtoBuf : 协议缓冲,谷歌的数据交换格式。
SimpleBinaryEncoding : 用于低延迟应用程序的对二进制格式的应用程序信息的编码和解码。
Thrift : 高效的跨语言IPC/RPC,用于C++,Java,Python,PHP,C#和其它多种语言中,最初由Facebook开发。