C++的生命周期和编程范式

C++程序的四个阶段

编码(coding)、预处理(pre-processing)、编译(compiling)和运行(running)

编码(coding)

编码应该是你很熟悉的一个阶段了,这也是我们“明面”上的开发任务最集中的地方。在这个阶段,我们的主要工作就是在编辑器里“敲代码”:定义变量,写语句,实现各种数据结构、函数和类。编码阶段是 C++ 程序生命周期的起点,也是最重要的阶段,是后续阶段的基础,直接决定了 C++ 程序的“生存质量”。

预处理(pre-processing)

所谓的预处理,其实是相对于下一个阶段“编译”而言的,在编译之前,预先处理一下源代码,既有点像是编码,又有点像是编译,是一个中间阶段。预处理是 C/C++ 程序独有的阶段,其他编程语言都没有,这也算是 C/C++ 语言的一个特色了。在这个阶段,发挥作用的是预处理器(Pre-processor)。它的输入是编码阶段产生的源码文件,输出是经过“预处理”的源码文件。“预处理”的目的是文字替换,用到的就是我们熟悉的各种预处理指令,比如 #include、#define、#if 等,实现“预处理编程”。这部分内容,我后面还会展开讲。不过,你要注意的是,它们都以符号“#”开头,虽然是 C++ 程序的一部分,但严格来说不属于 C++ 语言的范畴,因为它走的是预处理器

编译(compiling)

在预处理之后,C++ 程序就进入了编译阶段,更准确地说,应该是**“编译”和“链接(Linking)”**。简单起见,我统一称之为“编译”。在编译阶段,C++ 程序——也就是经过预处理的源码——要经过编译器和链接器的“锤炼”,生成可以在计算机上运行的二进制机器码。这里面的讲究是最多的,也是最复杂的,C++ 编译器要分词、语法解析、生成目标码,并尽可能地去优化。在编译的过程中,编译器还会根据 C++ 语言规则检查程序的语法、语义是否正确,发现错误就会产生“编译失败”。这就是最基本的 C++“静态检查”。

运行(running)

编译阶段之后,有了可执行文件,C++ 程序就可以跑起来了,进入运行阶段。这个时候,“静态的程序”被载入内存,由 CPU 逐条语句执行,就形成了“动态的进程”。运行阶段也是我们最熟悉的了。在这个阶段,我们常做的是 GDB 调试、日志追踪、性能分析等,然后收集动态的数据、调整设计思路,再返回编码阶段,重走这个“瀑布模型”,实现“螺旋上升式”的开发。

C++语言的五种编程范式

什么是编程范式呢?关于这个概念,没有特别权威的定义,我给一个比较通俗的解释:“编程范式”是一种“方法论”,就是指导你编写代码的一些思路、规则、习惯、定式和常用语。
在这里插入图片描述

面向过程

面向过程是 C++ 里最基本的一种编程范式。它的核心思想是“命令”,通常就是顺序执行的语句、子程序(函数),把任务分解成若干个步骤去执行,最终达成目标。

面向过程体现在 C++ 中,就是源自它的前身——C 语言的那部分,比如变量声明、表达式、分支 / 循环 / 跳转语句,等等。

面向对象

面向对象是 C++ 里另一个基本的编程范式。它的核心思想是“抽象”和“封装”,倡导的是把任务分解成一些高内聚低耦合的对象,这些对象互相通信协作来完成任务。它强调对象之间的关系和接口,而不是完成任务的具体步骤。

在 C++ 里,面向对象范式包括 class、public、private、virtual、this 等类相关的关键字,还有构造函数、析构函数、友元函数等概念。

泛型编程

泛型编程是自 STL(标准模板库)纳入到 C++ 标准以后才逐渐流行起来的新范式,核心思想是“一切皆为类型”,或者说是“参数化类型”“类型擦除”,使用模板而不是继承的方式来复用代码,所以运行效率更高,代码也更简洁。

在 C++ 里,泛型的基础就是 template 关键字,然后是庞大而复杂的标准库,里面有各种泛型容器和算法,比如 vector、map、sort,等等。

模板元编程

与“泛型编程”很类似的是模板元编程,这个词听起来好像很新,其实也有十多年的历史了,不过相对于前三个范式来说,确实“资历浅”。它的核心思想是“类型运算”,操作的数据是编译时可见的“类型”,所以也比较特殊,代码只能由编译器执行,而不能被运行时的 CPU 执行。

在讲编译阶段的时候我也说了,模板元编程是一种高级、复杂的技术,C++ 语言对它的支持也比较少,更多的是以库的方式来使用,比如 type_traits、enable_if 等。

函数式编程

最后一个函数式,它几乎和“面向过程”一样古老,但却直到近些年才走入主流编程界的视野。所谓的“函数式”并不是 C++ 里写成函数的子程序,而是数学意义上、无副作用的函数,核心思想是“一切皆可调用”,通过一系列连续或者嵌套的函数调用实现对数据的处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值