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

网站响应式好吗wordpress禁用前台代码编辑器

网站响应式好吗,wordpress禁用前台代码编辑器,学电商有前途吗,门户网站 意义前言提到重载这个词,我们会想到什么呢?重载有一种一词多义的意思,中华文化博大精深,之前有一个笑话,中国的乒乓球谁都打不过,男足谁都打不过,哈哈哈这也是非常有意思的,但是今天我们…

前言

提到重载这个词,我们会想到什么呢?重载有一种一词多义的意思,中华文化博大精深,之前有一个笑话,中国的乒乓球谁都打不过,男足谁都打不过,哈哈哈这也是非常有意思的,但是今天我们要研究的是函数重载,看看重载和函数在一起会碰撞出什么火花呢?

函数重载概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

这里要注意构成函数重载的条件只有三个:参数个数不同 参数类型不同 参数类型数据不同,如果函数的返回值类型不同是不构成函数重载的。

下边代码中的三种方式都构成函数重载,我们也可以来证实一下。

#include<iostream>
using namespace std;
// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
int main()
{Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, 'a');f('a', 10);return 0;
}

C++支持函数重载的原理

我们知道了C++可以支持函数重载,那么他的原理到底是什么呢?为什么C语言不支持呢?这里就必须要提到了名字修饰这个概念了。

之前的文章中有提到C/C++中的程序要运行起来必须有编译链接两个阶段,但是编译又分为预处理,编译,汇编。

预处理阶段

主要完成头文件展开,宏定义替换,注释的删除几个过程,形成test.i文件。

编译阶段

主要完成语法分析,词法分析,语义分析,符号汇总,转换为汇编指令,形成test.s文件。

汇编阶段

主要形成符号表,将汇编语言转换为二进制语言,形成test.o文件。

链接阶段

将形成的.o文件链接起来,形成段表,以及符号表的合并重定位。

我们发现在汇编阶段为形成符号表,C语言中的符号表的名称直接就是函数名,这才导致如果一个文件中有重载函数会造成冲突和二义性,这肯定是不行的,但是为什么C++可以函数重载呢?由于Windows环境下不好观察,我们使用Linux环境来观察一下:

使用以下指令:

#include<iostream>
using namespace std;
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}
int main()
{Add(10, 20);Add(10.1, 20.2);
}

我们发现函数名虽然相同,但是修饰后的名称并不相同,这也就是C++重载函数可以使用的原因,在构成符号表的时候,他们都是不同的名称,我们再来看几个样例。

#include<iostream>
using namespace std;
// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
int main()
{Add(10,'a');Add('a',10);
}

我们也能看出函数名修饰是跟参数有关系,我们也能大概总结出gcc编译器的命名规则。

g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】

总之构成函数重载的三要素就是参数个数不同,参数类型不同,参数类型顺序不同,这样才会在构成符号表的时候名称不同,只有这样,在链接的时候才不会产生二义性。

http://www.yayakq.cn/news/886712/

相关文章:

  • 企业网站推广 知乎h5和网站的区别
  • 政务网站无障碍建设网站建设推广 公司
  • 沈阳软件公司 网站制作公司网页建立
  • 中国建设银行的网站eclipse开发安卓app
  • 上海哪家做网站资兴市网站建设哪个好
  • 网站建设需要哪些功能php做网站需要啥技术
  • 多人运动免费正能量网站链接网站上的支付接口怎么做
  • 北京学设计去哪个网站好jsp网站开发的使用表格
  • 网站页头页尾怎么做浏览器缓冲设置交网站建设 域名计入什么科目
  • 百度引流免费推广怎么做太原seo团队
  • 网站维护的方式有哪几种阳江网络公司
  • 泰州泛亚信息做网站怎么样中国铁路总公司建设管理部网站
  • 网站做微信公众号范县网站建设电话
  • 怎么样建设一个网上教学网站qq空间的网站
  • 12388网站建设管理情况重庆网站制作工作室
  • 东莞凤岗网站建设制作wordpress留言代码
  • vs网站中的轮播怎么做四川成都旅游必去十大景点推荐
  • 网站建设后备案多少钱建设专业网站平台
  • 2019年建设银行安徽招聘网站做音响的是哪个网站
  • 中国小说网站策划与建设试述建设一个网站的具体步骤
  • 哪个网站微博做的最好自然堂网站建设情况
  • 甘孜网站建设北京做电商网站设计
  • 对网站外部的搜索引擎优化广州自助网站搭建建站公司
  • 万荣做网站jq网站特效插件
  • 网站推广指的是什么农业公园网站建设
  • 广东佛山网站建设电商主图一键生成免费
  • 免费发布信息网站做外贸生意上国外网站
  • 建设网站需要花费python app开发
  • 动易网站首页制作河南比较出名的外贸公司
  • 网站建设费用评估长沙营销网站建站公司