C++语言的特性

C++ 是编译型语言

读者编写的程序想要运行,源代码必须经过两道处理流程,你编写的程序只是一些字符文本,计算机不懂,需要编译器把你的这些文本符号,转换为CPU可以理解的各种命令,这些命令就是机器语言,CPU只能执行这些一条条的机器语言。

  1. 编译:编译器读取源码文件,生成目标文件;
  2. 链接:链接器整合多个目标文件,生成可执行程序。

C++ 项目一般由多个源码文件构成,流程示意图:

生成的可执行文件绑定特定硬件、操作系统,不能直接跨平台使用(Mac 程序无法直接在 Windows 电脑运行)

我们常说的 C++ 可移植性,指源代码可移植:同一份源码,能在多套系统上分别编译、正常运行。

也就是,并不是你在windows下面编译的exe,拷贝到mac上面可以运行,而是说你同一份源代码(文本字符),一般是.cpp .h 这里面的这些源码文本,拷贝到mac,然后再mac电脑上面经过mac的C++编译器编译成mac能运行的程序,是这个意思。

C++ ISO标准

ISO C++ 标准定义两大组成部分

  1. 核心语言特性 语言本身内置基础能力,例如内置类型char/intfor/while循环等。
  2. 标准库组件 官方配套工具集,例如vector/map容器、<<输出、getline()读取输入等 IO 操作。

标准库全部由纯 C++ 代码实现,各大编译器都会内置提供;仅有极少数底层场景(线程上下文切换)会用到少量机器码。

为什么,需要标准库?标准库就是我们现在经常听到的SDK类似,它的目的是使得使用者,例如使用C++的人,可以减少工作量,如果我们所有的东西都要使用者(程序员)重新开发,那么估计这门语言会没多少人使用,例如为了显示一行文本到控制台中,如果每个程序员都要自己写,那工作量非常大,为了解决这个问题,C++的设计者,自己写好一套代码,编译成一个库(lib),然后提供给程序员用就可以。说白了,就是不要重复造轮子,大大提高开发效率,可以吸引更多的人使用。

标准库不靠特殊语法黑魔法实现,本身就是用 C++ 写的,你完全可以读懂它的源码、自定义同类工具。

C++ 是静态类型语言

所有变量、值、标识符、表达式,在代码使用位置处,编译器必须明确知晓它的类型; 对象的类型,直接决定它支持哪些运算、操作。

静态类型核心好处 编译阶段就能做类型校验,很多错误写代码时直接被编译器拦截,不会等到程序运行才崩溃,兼顾安全与性能。也就是,编译器在编译你的代码成机器语言的时候,如果发现你的类型不对,就报错了,例如你把一个人的名字存储到一个保存年龄的变量中,年龄一般用整数保存,而文字是字符串,这时候就报错了。编译阶段的错误,程序员可以马上知道,可以立即改进过来,而如果发生在运行阶段,可能就会变得更加麻烦了。因为这个时候,已经发布出去给其他人使用了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注