当前位置: 首页 > news >正文

《C++代码分析》第二回:函数重载const char* ,char*,const char[],char[]汇编代码上的区别

一、前言

C++相比C是支持函数重载的,现在我们详细探讨一下C++函数重载与类方法承载。

二、案例代码

我们编译如下代码,同样的我们关闭代码优化,删除符号链接文(.pdb)

#include "windows.h"
#include "windef.h"
#include <iostream>
#include <tchar.h>
using namespace std;int LoadFile(const char* filename) {printf("%s", filename);return 1;
}
int LoadFile(char* filename,int mod) {if (mod == 1) {printf("%s", filename);return 1;}return 2;
}
int _tmain() {char filename[] = "C:\\\\windows\\x86\\myfile\n";char* pfilename = filename;const char constfilename[] = "C:\\\\windows\\x86\\myfile\n";const char* pconstfilename = "C:\\\\windows\\x86\\myfile\n";LoadFile(constfilename);LoadFile("C:\\\\windows\\x86\\myfile\n");LoadFile(filename,1);return 0;
}

三、const char* ,char*,const char[],char[]汇编代码上的区别

我们注意上述代码的细节:
第一个函数我们使用静态数组传参。
第二个我们使用定值传参。
第三个我们使用数组传参。
顺便探讨一下静态数组和数组的底层区别。
在这里插入图片描述
我们发现实际上const char[] 和char[]在汇编上实际没有区别,const仅仅在编译的时候对类型进行检查。
const char constfilename[]相比const char* pconstfilename,前者不仅仅用到了.rdata的内容,还需要占据相同大小的堆栈空间,而后者仅仅占用一个指针的堆栈空间,所有他们之间还是有区别的。
在这里插入图片描述

四、重载函数区别

函数调用详解,从第三个与前两个对比可以看到C++直接将其处理为了两个不同的函数。
在这里插入图片描述
我们放回符号链接文件再次查看,显然被处理(修饰)为了不同的函数,具体修饰规则懒得看了,有需要再说。
在这里插入图片描述

http://www.lryc.cn/news/31265.html

相关文章:

  • 【学习笔记】深入理解JVM之垃圾回收机制
  • 49.在ROS中实现local planner(2)- 实现Purepersuit(纯跟踪)算法
  • Allegro如何设通孔Pin和Via的消盘操作指导
  • Android工厂模式
  • 神经网络硬件加速器-架构篇
  • Python raise用法(超级详细,看了无师自通)
  • 1.SpringSecurity快速入门
  • Graph Partition: Edge cut and Vertex cut
  • Javascript周学习小结(初识,变量,数据类型)
  • C语言-基础了解-10-C函数
  • 【LeetCode】剑指 Offer(16)
  • 第三十九章 linux-并发解决方法二(互斥锁mutex)
  • 脚本方式本地仓库jar包批量导入maven私服
  • 【c++】引用的学习
  • linux 软件安装及卸载
  • XShell连接ubuntu20.04.LTS
  • 【FPGA】Verilog:MSI/LSI 组合电路之解码器 | 多路分解器
  • 深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架
  • 一、策略模式的使用
  • Verilog使用always块实现时序逻辑
  • 面向对象设计模式:行为型模式之迭代器模式
  • 如何快速在企业网盘中找到想要的文件
  • 香橙派5使用NPU加速yolov5的实时视频推理(二)
  • 算法练习-二分查找(一)
  • 通用业务平台设计(五):预警平台建设
  • Windows openssl-1.1.1d vs2017编译
  • 【深蓝学院】手写VIO第2章--IMU传感器--笔记
  • 网络基础(二)之HTTP与HTTPS
  • Python每日一练(20230306)
  • C/C++每日一练(20230305)