湖南营销型网站建设磐石网络知名,wordpress获取页面正文,广州网站网站建设,建站公司平台一、前言
C相比C是支持函数重载的#xff0c;现在我们详细探讨一下C函数重载与类方法承载。
二、案例代码
我们编译如下代码#xff0c;同样的我们关闭代码优化#xff0c;删除符号链接文#xff08;.pdb#xff09;
#include windows.h
#include w…一、前言
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直接将其处理为了两个不同的函数。 我们放回符号链接文件再次查看显然被处理修饰为了不同的函数具体修饰规则懒得看了有需要再说。