|
| 1 | +1.1 C++ 简介 |
| 2 | + |
| 3 | +C++ 是一门非常经典的高级编程语言。顾名思义,C++可以看做是C语言的增强版,在C的基础上扩展了更多的功能;最主要的扩展,就是面向对象和泛型编程。 |
| 4 | + |
| 5 | +因此C++融合了多种不同的编程方式:以C语言为代表的面向过程编程;面向对象编程;以及模板化的泛型编程。 |
| 6 | + |
| 7 | +可以说,C++一门“大而全”的编程语言,你可以用它实现想要的任何功能;与此同时,学习C++需要掌握的内容也会比较多。 |
| 8 | + |
| 9 | +1.1.1 C和C++ |
| 10 | + |
| 11 | +20世纪70年代,贝尔实验室的Dennis Ritchie为了开发UNIX操作系统,专门设计了一门结构化的高级语言,这就是大名鼎鼎的C语言。因为是为操作系统设计的语言,它本身是比较底层的,所以C具有低级语言的高运行效率、硬件访问能力,此外又融合了高级语言的通用性。 |
| 12 | + |
| 13 | +C语言语法清晰,具有非常好的结构化编程的特性。于是C语言快速地统治了底层的系统级编程,并成为了之后几十年内经典的教学语言。 |
| 14 | + |
| 15 | +C语言编程的整体思路是“过程式”的,也就是说,我们把想让计算机执行的操作按照步骤一步步定义好,然后用C语言写出来;所以我们写的代码,就是一个处理流程的描述。这种方式很容易理解,也可以非常方便地翻译成计算机能懂的机器语言;但是在面对大型项目、代码量非常大时,就会显得杂乱无章,代码的可读性就大大降低了。 |
| 16 | + |
| 17 | +于是另一种编程方式应运而生,这就是面向对象编程。这种方式的主要思路是先构建“对象”,然后通过定义好的对象行为,实现我们想要的操作。 |
| 18 | + |
| 19 | +贝尔实验室的 Bjarne Stroustrup(比雅尼·斯特劳斯特鲁普),在20世纪80年代创建了一个新的面向对象语言——C++。 |
| 20 | + |
| 21 | +名字一目了然,它是基于C的,扩展了C的功能;所以C++是C语言的超集,所有C语言程序都可以在C++的环境下运行。而扩展的部分,主要就是引入了面向对象的特性,并实现了对C的泛型编程支持。 |
| 22 | + |
| 23 | +C++的出现极大地扩充了C的应用场景,为C语言的长盛不衰提供了很大的助力。所以我们平常看招聘要求的技术栈描述,往往是把C/C++放在一起说的。 |
| 24 | + |
| 25 | +1.1.2 C++ 的应用场景 |
| 26 | + |
| 27 | +C++完全兼容C,具有C面向硬件的特性;此外还拥有面向对象和泛型编程的扩展。所以C++编写的程序运行效率高、功能强大,特别适合用在系统级应用场景上。所以我们经常可以看到,偏向底层、系统的开发,一般用的语言都是C++。 |
| 28 | + |
| 29 | +底层硬件,系统编程:JVM的底层,Python解释器的底层,都离不开C/C++的身影;人工智能核心库的代码,也大多是C++写的 |
| 30 | + |
| 31 | +嵌入式开发 |
| 32 | + |
| 33 | +游戏开发 |
| 34 | + |
| 35 | +当然,除了这些实际应用场景外,由于C/C++是经典的教学语言,因此计算机专业考研、考级、竞赛等场合往往也是把C++作为第一语言的。无论学习还是工作,C++都是一门非常有用的编程语言。 |
| 36 | + |
| 37 | +1.2 C++ 标准 |
| 38 | + |
| 39 | +C++作为一门高级编程语言,在不同的硬件平台上有着良好的可移植性。这意味着我们不需要改动代码,写出来的程序就可以在不同的平台“翻译”成机器能读懂的语言。要实现这个目标,就必须对C++编写的程序设定一些规范,这就是C++的标准。 |
| 40 | + |
| 41 | +C++之父Stroustrup写过一本《C++编程语言》(The C++ Programming Language),里面有一个参考手册,专门介绍了这门语言的特性和用法。这其实就是最初的C++事实标准。 |
| 42 | + |
| 43 | +不过真正意义上的标准,还需要专门的组织认证。ANSI(American National Standards Institute,美国国家标准局)在制定了C语言标准之后,在90年代专门设了一个委员会来制定C++的标准,并和ISO(国际标准化组织)一起创建了联合组织ANSI/ISO。1998年,第一个C++国际标准终于出炉了;这个标准在2003年又做了一次技术修订。因此我们一般所说的C++标准,第一版往往被叫做C++ 98/03。 |
| 44 | + |
| 45 | +跟大多数语言一样,C++也在不停地发展更新。ISO在2011年批准了C++新标准,这可以认为是C++的2.0版本,一般被叫做C++ 11。C ++ 11新增了很多新特性,极大地扩展了C++的语言表达能力。此后在2014年和2017年,又出了两个新版本C++标准,一般叫做C++ 14和C++ 17,不过这两个版本增加的内容并不多;真正意义上的下一个大版本是2020年的C++ 20,它再一次给C++带来了大量的新特性。 |
| 46 | + |
| 47 | +1.3 C++ 代码如何运行 |
| 48 | + |
| 49 | +我们用C++写好的代码,其实就是符合特定语法规则的一些文字和符号。计算机是怎样识别出我们想要做的操作、并正确执行呢? |
| 50 | + |
| 51 | +这就需要一个专门的翻译程序,把我们写的源代码,翻译成计算机能理解的机器语言。这个翻译的过程就叫做“编译”,而这个“翻译官”就叫做编译器。所以C++是一门编译型的编程语言,这一点和C是一致的。 |
| 52 | + |
| 53 | +事实上,C++代码的运行过程跟C程序代码也是一样的,大致可以分为下面几步: |
| 54 | + |
| 55 | +首先编写C++程序,保存到文件中,这就是我们的源代码; |
| 56 | + |
| 57 | +编译。用C++编译器将源代码编译成机器语言,得到的这个结果叫做目标代码; |
| 58 | + |
| 59 | +链接。C/C++程序一般都会用到库(library),这些库是已经实现好的目标代码,可以实现特定的功能(比如在屏幕上把信息打印显示出来)。这时我们就需要把之前编译好的目标代码,和所用到的库里的目标代码,组合成一个真正能运行的机器代码。这个过程叫做“链接”,得到的结果叫做可执行代码; |
| 60 | + |
| 61 | +运行。可执行代码就是可以直接运行的程序,运行它就可以执行我们想要的操作了。 |
0 commit comments