C++
itsShan3
这个作者很懒,什么都没留下…
展开
-
C++ | const用法(与指针结合/类型转换)
const用法在C代码中const修饰的量,可以不用初始化,C中不叫常量,而叫常变量,不能作为左值被改变,可以通过指针找到常变量的内存地址改变其值,常变量不可做为数组的下标。在C++中,必须初始化,叫常量。与C不同,C中const被当作一个变量来编译生成指令,而C++,所有出现const常量名字的地方都被常量的初始化替换了。在C++中,当const被一个变量初始化(int a = 10; const int b = a;)时,而不是被立即数初始化,则他退化成常变量,与C语言一样,是一个变量。(注意原创 2022-02-24 18:11:30 · 2038 阅读 · 1 评论 -
C++ | 详解函数重载
什么是函数重载?一组函数,其中函数名相同,参数列表的个数或类型不同,那么这一组函数就成为函数重载一组函数要称得上函数重载,一定是处在同一个作用域中函数名同,参数列表同,返回值不同,不叫重载,因为函数符号都相同函数重载是通过函数符号来判断的,如void func(int a);和void func(const int a);这两个函数名相同,参数都为int型,生成的函数符号伟func_int所以不算函数重载C++在C的基础上支持函数重载,是因为C++中函数会在汇编时产生函数符号,一般由函数名+参原创 2022-02-17 17:47:11 · 569 阅读 · 0 评论 -
C++ | inline内联
- 调用普通函数调用过程有参数压栈,函数栈帧的开销和回退等,存在函数调用的开销。- inline函数在编译过程中,没有函数调用的开销,在函数的调用点直接把函数的代码进行展开处理inline函数不再生成相应的函数符号,而普通函数会生成函数符号,如int sum(int a, int b);会生成sum_int_int的函数符号。并不是所有的inline函数都会被编译器处理成内联函数(如递归)。在debug版本中,inline不起作用,只有在release版本中起作用。注意:函数被声明为内联函原创 2022-02-16 17:13:22 · 504 阅读 · 0 评论 -
程序编译链接原理
编译过程预处理:处理#开头的指令编译:将.cpp翻译成.s的汇编代码汇编:输出符号表,将.s翻译成.o的机器代码,二进制可重定位的目标文件(.*o)链接:编译完成所有的.o文件,以及静态库文件(*.a,.*lib)链接链接详细过程将所有.o文件的代码段合并,符号表合并后,进行符号解析(所有对符号的引用/UND/都要找到符号定义的地方)符号的重定向(给所有符号分配虚拟地址)生成xxx.exe/a.out可执行文件举例int gdata = 10;int sum(int a,int原创 2022-02-14 13:50:44 · 209 阅读 · 2 评论 -
函数调用堆栈的过程
int sum(int a,int b){//函数左括号:给当前函数开辟栈帧空间//函数右括号:归还栈空间,并回到原来调用它的函数 int temp=0; temp = a+b; return temp;}/*sum的汇编代码push ebp;mov ebp,esp; 将ebp指向esp的位置,并将ebp的原地址保存sub esp,4Ch; 开辟栈帧空间mov dword ptr[ebp-4],0; 存temp=0mov eax,dword ptr[ebp+0Ch];原创 2022-02-11 12:55:18 · 686 阅读 · 2 评论