C++基础知识(二) -- 函数重载

news2024/11/19 1:22:37

        自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。

        比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

函数重载概念

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

        1、参数类型不同

        2.参数个数不同

         3、参数类型顺序不同

C++支持函数重载的原理--名字修饰(name Mangling)

为什么这里换成 .c 之后就不行了呢

        在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

        1. 实际项目通常是由多个头文件和多个源文件构成,而通过C语言阶段学习的编译链接,我们
可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标
文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么
怎么办呢?

        2. 所以链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就
会到b.o的符号表中找Add的地址,然后链接到一起。

        3. 那么链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的
函数名修饰规则。

        4. 由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使
用了g++演示了这个修饰后的名字。

        5. 通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】。

        采用C语言编译器编译后结果

        结论:在linux下,采用gcc编译完成后,函数名字的修饰没有发生改变。

采用C++编译器编译后结果

 

        结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参
数类型信息添加到修改后的名字中。

        通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修
饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何禁用Windows 10快速启动(以及为什么要这样做)

如果您不想启用Windows 10快速启动,则可以相对轻松地禁用它。 快速启动是一项功能,首先在 Windows 8 中作为快速启动实现,并延续到 Windows 10,让您的 PC 更快地启动,因此得名。虽然这个方便的功能可以通过将操作系统…

Qt model/view 理解01

在 Qt 中对数据处理主要有两种方式:1)直接对包含数据的的数据项 item 进行操作,这种方法简单、易操作,现实方式单一的缺点,特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作,如果现实方式改…

了解基于Elasticsearch 的站内搜索,及其替代方案

对于一家公司而言,数据量越来越多,如果快速去查找这些信息是一个很难的问题,在计算机领域有一个专门的领域IR(Information Retrival)研究如何获取信息,做信息检索。在国内的如百度这样的搜索引擎也属于这个…

Linux系统编程系列之线程池

Linux系统编程系列(16篇管饱,吃货都投降了!) 1、Linux系统编程系列之进程基础 2、Linux系统编程系列之进程间通信(IPC)-信号 3、Linux系统编程系列之进程间通信(IPC)-管道 4、Linux系统编程系列之进程间通信-IPC对象 5、Linux系统…

Linux文件查找、别名、用户组

1、文件查看: 查看/etc/passwd文件的第5行 2、文件查找 (1)在当前目录及子目录中,查找大写字母开头的txt文件 (2)在/etc及其子目录中,查找以数字开头的文件 (3)在$HOME目录及其子目录中,查找所有文本文件 (4)忽略文件名大小写查找a.txt 3、查…

博途1200/1500 ALT指令

SMART PLC的ALT指令实现代码,请查看下面文章博客 SMART PLC如何构造ALT指令_smart200类似alt指令-CSDN博客单按钮启停这些老生常谈的问题,很多人感兴趣。这篇博文讨论下不同的实现方法,希望对大家有所帮助。指令虽然简单,但是在编程的时候合理使用对我们高效率编程帮助还是…

来聊一聊独热码检测

国庆假期不小心扭伤了脚踝,在家没事看到一篇文章挺有意思,于是写出来分享给大家。 这是一道数字电路面试题,也是很多面试官很喜欢考察面试者的一道题目,题干很简单:给定一个4bit的信号A,设计逻辑来判断A是…

博客之站项目测试报告

项目背景项目功能测试计划Bug总结升级自动化测试正常登录流程 项目背景 1:博客之站系统是采用前后端分离的方式来实现;使用MySQL、Redis数据库储存相关数据;同时部署到云服务器上。 2:包含注册页、登录页、博客列表页、个人列表页…

计算机考研 | 2020年 | 计算机组成原理真题

文章目录 【计算机组成原理2020年真题43题-13分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2020年真题44题-10分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2020年真题43题-13分】 【第一步&…

vertx的学习总结6之动态代理类和测试

Beyond the event bus 一、章节覆盖: 如何在事件总线之上公开服务 verticles和事件总线服务的异步测试 动态代理: MyService 接口 package porxy.test;import io.vertx.codegen.annotations.ProxyGen;ProxyGen public interface MyService {void he…

基于ssm的电商管理平台/基于javaweb的网上购物系统/电子商城网站

摘 要 本文论述了电商管理平台的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,基于SSM框架、JSP技术和Mysql数据库设计来实现的,网站主要包括用户注册、用户登录、查看商品信息、系统公告等…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用(optimtool.example) import optimtool.example as oeLasso问题(Lasso) oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

Linux删除空目录/非空目录和文件

一、删除目录 删除名为mydir的空目录: rmdir mydir 删除名为mydir的非空目录(非空目录是指该目录包含了其他文件或子目录,而不是空的或没有任何内容的目录) rm -r mydir 删除mydir1下的空目录mydir2 rmdir mydir1/mydir2 删除当前目录下所有以dir一个数字结尾的目录…

打开MySQL数据库

在命令行里输入mysql --version就可以查看: mysql -uroot -p之前设置的密码(不用输入)就可登录成功:

什么是邮件签名证书?

邮件签名证书是一种数字证书,用于保护电子邮件的安全性和可信度。邮件签名证书可以确保电子邮件本身在发送过程中不会被篡改或伪造,同时也可以验证发件人的身份。 邮件签名证书的工作原理是使用S/MIME协议。S/MIME协议是一种用于加密和签名电子邮件的标准…

tio-websocket-spring-boot-starter的最简单实例,看完你一定有所收获

前言 我最近一个月一直在寻找能够快速开发实时通讯的简单好用的模块,所以我就去寻找了一下相关的内容.在此之前我使用的是Spring原生的webSocket,她有个弊端就是设置组不容易设置,而且配置上也稍微复杂一点,需要配置拦截器和处理器,还需要把它放入到Springboot的启动容器里面,也…

在word文档里面插入漂亮的伪代码

推荐用texsword.0.8 安装与界面 下载链接:https://sourceforge.net/projects/texsword/ 极为轻便,是Word的一个宏 安装过程也是极为简单,复制解压后的 texsword.dotm 文件到 C:\Users\{YOUR_USER_NAME}\AppData\Roaming\Microsoft\Word\ST…

gitgitHub

在git中复制CtrlInsert、粘贴CtrlShif 一、用户名和邮箱的配置 查看用户名 :git config user.name 查看密码: git config user.password 查看邮箱:git config user.email 查看配置信息: $ git config --list 修改用户名 git co…

【树】树的直径和重心

目录 一.树的直径 (1)定义 (2)思路 (3)例题 (4)std(第一小问) 二.树的重心 (1)介绍 (2)求重心 (3)例…

全排列[中等]

优质博文:IT-BLOG-CN 一、题目 给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例…