Skip to content

C++ 简述

为何 C/C++ 仍然如此重要

程序开发的一些权衡:

  • 运行效率 VS 开发效率;
  • 易用性 VS 安全性;

对于 C 而言,在开发过程中足够精细,就可以极大程度上优化程序的运行效率,同时保证易用性和安全性。此外,C 还是各大操作系统底层开发的语言,因此其地位难以替代。

C++ 填补了编程领域的重要生态位:需要同时有效使用硬件提高性能管理高复杂性的程序

C++宗旨ZeroOverhead):

  • 你不用的就不用为此付出代价; What you dont use, you dont pay for.
  • 你用的就不可能自己手写出更好的。 What you do use, you couldnt handcode any better.

更详细地, C++ 的宗旨还包括:

  • 不限制程序员的风格;
  • 注重分划(compartmentalization);
  • 充分相信程序员,交由程序员全权控制;
  • 在编译时加强安全检查;
  • 问题驱动:C++ 是由解决现实中的问题来驱动的;
  • 简单、高效(ZeroOverhead)、稳定;
  • 不专家化:并不只满足专家的需求;
  • 不模仿、不迷信理论、不轻易变革(即:不随波逐流)。

CC++ 的关系

  • 超集关系
  • 编程技巧相同
  • 时空开销相同

程序设计

编程是科学艺术的结合。

程序设计范式一般有两类:

  • 面向步骤:基于步骤调用的概念。偏向图灵机的思想。
  • 面向对象:引入概念和模型来刻画现实中人与世界交互的现象。特点是封装继承
  • 函数式:由微小且有用的函数聚集起来,合成最终的结果。
  • 逻辑式:根据公理和推导规则进行推理,回应用户的询问。
  • 并发编程:使程序可以分发到独立的个体上运行。如多线程和并发计算等。
  • 泛型编程:将常用的数据结构和算法进行抽象,设计出效率高、可重用的库。

一般来说,一种程序设计语言可能包含多种程序设计范式。

面向对象程序设计的历史

  • Simula 67​:面向对象的开山之作,引入了“类”和“对象”的概念,,但性能太差,不适合实际使用。
  • Smalltalk:将“万物皆对象”的理念推向极致,将数据和功能均封装在对象内,所有操作都是对象间的消息传递。
  • C++:继承了 Simula 的类、继承、多态等特性,同时保持了 C 语言的效率和灵活性。
  • Java:通过 Java 虚拟机(JVM)实现了跨平台的应用开发,并推动了规范化的面向对象程序设计。

C++ 的家谱图

C++ 的诞生

  • 1979 年(史前):研究分布式系统的系统软件组织。实现有 Simula ,可读性与层次性强但性能较差;BCPL,调试和 debug 困难;C with class,兼容 C,且由于使用了 C​ 的链接器,效率大大提高。
  • 1983 年:C++ 诞生。当时的硬件和 OS 运行环境以及产业界和大学的用户资源影响了语言设计的因素。
  • ANSIISO:抽象类、多重继承、异常和模板加入。
  • C++ 98C++ 的第一个 ISO 标准。
  • C++14/17/20:持续进化,更多库的加入,更多常用操作提供语法支持。

C++ 的语言特性

  • 静态、强类型
  • OOP
  • 泛型编程
  • 异常处理