因为那个C++最全的笔记是从第18课开始做(笔者说18课之前都很基础),所以这里就对前18课的知识做个笔记总结
C++的工作过程
- 这里提到的C++工作过程主要涉及两个:编译与链接
- 之前考研时候学到,(在组成原理的某个章节),计算机的工作过程其实就涉及 “将源程序转换成可执行文件”,与其中便有许多雷同之处
编译
- 编译之前程序需要进行预处理,Cherno说明预处理其实就是把include文件内容复制进来,然后会输出一个 xx.i 文件(上图有说明,包括视频之后会演示)
- 一个cpp文件就是有一个翻译单元
- 当我们运行vs的运行之后,翻译单元会 预处理-编译-(汇编)-链接,其中 xx.obj 是汇编后的二进制文件,而文件链接后就生成 xx.exe文件
链接
- 链接就是把各个.obj,还有标准库连接起来。其中关键一点在于,连接焦点是要找到每个符号与函数在哪
- ps:如果A.cpp中只写函数声明,而其他cpp文件没有函数,则会编译不会报错,运行时会出现链接错误
与Java对比
- C++与Java虽然都同属于高级语言,但java属于解释性语言,也就是每解释一行代码就将其直接转换成机器码,然后执行
- 虽然java有生成字节码,但字节码不是编译也不是翻译,就是单纯一个转换,字节码依旧属于高级语言范畴,需要又jvm解释成机器码才能运行
C/C++与java的变量定义、声明、初始化(或者还有分配内存?)
int i; //c.c++直接定义,但java也相同
int i=1;
class A{}
A a; //但对于类或者结构体,c.c++也是直接定义并分配内存了,并且这是在栈内分配
A* a=new A(); //c.c++也可通过指针定义,需要用new,但是在堆内分配
A a; //java这样的话只会分配句柄(引用),不会实际分配内容,其实底层就是C++指针实现
a = new A(); //这样才有内存分配