大家好欢迎来到我的C++教程。C++是我一直以来非常喜欢的一门编程语言,我也希望它被更多人了解,因此萌生了制作一份C++教程的想法。和很多人一样,我是在大学阶段接触到C++的。现在工作五年多,C++也一直是我的主力编程语言。我也算是对C++有一些经验,但同时也深知C++的复杂。没有人敢说自己精通C++,我的教程也难免出现疏漏错误。欢迎大家来和我交流讨论,本站的关于页面可以找到我的联系方式,也可以直接在下方的评论区留言。
一、什么是程序
现代社会已经离不开各种各样的程序了。你手机里的APP,电脑上的游戏,都是程序。简单来说,程序就是一系列指令,计算机可以识别并执行这些指令完成相应的动作。而程序员的工作就是将解决问题的方案描述为计算机可以识别的形式,这就是程序设计。程序设计过程中最有力的工具自然就是编程语言,而C++自其诞生以来,就一直是最受瞩目的编程语言之一。
二、什么是C++
C++是一门通用编程语言,通用意味着它能胜任各种角色,计算机领域的每一个角落都能找到C++的影子。但总体上,C++更偏向于系统编程,那些既要求高性能,又需要高级特性支持的领域正是C++大显身手的地方——例如操作系统、游戏引擎、GUI框架、浏览器、服务器后端、高性能计算等。
它是C语言的直系后裔,但他支持更加高层的数据抽象、提供语言级别的面向对象支持、支持泛型编程、支持函数式编程。
三、C++的历史
C++的诞生可以追溯到1979年。C++之父比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)彼时正在贝尔实验室工作,致力于研究Unix内核的分布式计算问题。当时的C语言凭借其通用、高效、可移植的特点已经逐渐流行开来,但它缺少支持大型程序开发的高级特性。而Simula正好相反,类、继承、虚过程等特性正是开发大型程序的利器,但它的执行速度却太慢了。于是比雅尼将Simula的一些高级概念融入C语言,发明了C with Classes。当然,除了Simula和C之外,C++还从其他语言吸收了很多灵感,如ALGOL 68、Ada、CLU以及ML等语言。1983年,C with Classes改名C++,并沿用至今。
经过十年的发展,C++凭借其兼顾抽象与性能的特点逐渐流行开来,许多商业公司都推出了自家的C++编译器。问题也随之而来,很多公司都给自家编译器添加了很多独有的语言特性,C++的标准化问题迫在眉睫。
于是在1990至1991年间,ISO C++标准委员会逐步成立,并开始推进C++的标准化工作。直到1998年,第一个ISO C++标准才正式出版——ISO/IEC 14882:1998。
2003年,委员会发布了C++的第二版标准,但C++03主要聚焦在修复缺陷而非引入新特性,因此这个版本的存在感并不高。
2011年,C++11的出版标志者现代C++的诞生,这是C++史上一个伟大的里程碑。从此之后,C++保持着每三年发布一个新版本的更新节奏并持续至今。
从C++11、C++14、C++17一直到现行的C++20标准。C++的下一个版本的修订工作已经接近尾声,C++23应该会在2023年末问世。
四、本系列教程的愿景
打造现代C++教程,以C++20/23为基础。不要担心新标准会带来额外的学习负担,C++在其进化的过程中一直将兼容性放在首位考虑,因此很多基础概念都是相同的,直接从最新标准开始学习不会更难,而且学会之后不论是阅读旧标准的代码还是以旧标准来开发都是很容易的事情。而且,新的标准带来的新思想对于使用旧标准进行开发也会带来很多好处。
紧扣标准,专注于语言本身。市面上的很多教程并未强调标准的重要性,很多老师在教学的过程中使用很多模糊的语言来描述C++中的概念,例如经典的误导“数组名就是指针”。标准对于C++的各种概念都有非常明确的定义,使用精确的术语有助于人与人之间的交流,毕竟大型程序的开发工作绝不是单打独斗就能完成的。
循序渐进,由浅到深。根据我个人的学习经验来安排教程的进度,当然,这不一定适合所有人。如果你在学习的过程中遇到了难以理解的概念,建议你先“不求甚解”,C++的各种概念之间都有着千丝万缕的联系,当你爬到一定的高度俯瞰全局的时候,你一定会有新的收获。C++是一门能够“学会”很多次的编程语言。
五、教程使用的编程环境
主要使用在线编译器网站godbolt。这个网站可以在线编译、运行C++代码,最重要的是可以切换各种编译器,查看它们的行为差异。使用在线编译器也能保证读者和教程使用相同的编译环境。除了C++,godbolt也可以在线运行其他很多语言,例如C、Fortran、Java、Python、Rust等等。
由于godbolt无法在线运行MSVC编译器生成的程序,因此偶尔也会使用Visual Studio来运行示例代码。
教程中的示例代码会尽量避免各种实现上的差异,因此任何你喜欢的编程环境都是可行的,只要确保你的编译器能支持较新的标准即可。
目前流行的C++编译器有GNU计划的GCC、基于llvm的clang以及微软家的MSVC,俗称C++编译器御三家。此外还有英特尔针对自家CPU推出的icx,英伟达针对自家GPU推出的nvcc等。
六、推荐的书籍与资源
《C++程序设计 原理与实践》,Programming Principles and Practice Using C++,C++之父亲自编写的C++入门书。
《C++ Primer》,经典的入门书,缺点是只讲到C++11的部分。
cppreference,在线文档,关于C++的一切都能在上面找到答案。
godbolt,强大的在线编译器平台。
cppinsights,C++去糖器。
hackingcpp,图文并茂的C++学习资源。
ISO/IEC 14882 最新草案,随时更新的C++最新草案。
CSDIY,泛计算机专业自学指南。