重载的分析

2023-11-01

前言

在c++中,出现重载的概念,其实就是一个高级语言的象征,他的出现就是机器语言更加的自然化,他其实可以理解位我们自然语言中的动词,它可以和不同的名词起到不同的功能

重载

定义:用一个相同的函数名来定义不同的函数
重载的条件:
参数的个数不同
参数的类型不同
参数的顺序不同
与函数的返回值没有关系

但是在c++中,因为有默认参数的存在,所以有时候会产生二义性,就比如下面这个程序,编译会报错

int func (int a,int b,int c=0)
{
	return a+b+c;
}
int func (int a,int b)
{
	return a+b;
}
int main ()
{
	func (1,2);
}

因为c++存在默认参数,所以这种情况存在歧义,所以这样写不对

c++重载调用准则

将所有的同名作为候选者
尝试寻找可行的候选函数

	--精准匹配形参
	通过默认参数可以匹配到实参
	通过默认类型转换匹配到实参
	--匹配失败
	最终找的的候选函数不唯一,出现二义性,编译失败
	无法匹配到候选者,函数未定义失败

之后我们通过研究重载函数的入口地址,我们可以发现在编译器内部他其实是两个不同的函数

使用函数指针来调用重载函数

这个其实和之前一样,我们所强调的c++是一个强类型的语言,当类型不符合的时候,他就会报错

  1. 他会根据重载规则挑选与函数指针列表一致的重载函数
  2. 他会严格的检查函数类型和指针类型

    1.函数重载必须发生在同一个作用域里
    2.编译器需要函数列表或者参数名进行函数选择
    3.无法直接通过函数名得到函数重载入口地址
c代码和c++代码的共用

如果你想在c++中运行c代码,你可以加上下面这个宏,他在c++中会被识别,而在c语言中就不会被识别

#ifdef _cplusplus
extern "c" {
#endif
需要的代码
#ifdef _cplusplus
}
#endif


c++不能以c的编译方式进行编译,会在符号表中生成目标名
编译方式决定了函数被编译以后的目标名

  1. c++将函数名和参数列表编译成目标名
  2. c只将函数名编译成目标名
    我们可以很明确的知道c++会多编译参数列表
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重载的分析 的相关文章

随机推荐

  • 预测性维护(2)

    预测性维护 应用开发 预测性维护 应用开发流程 数据获取 数据处理 特征提取 模型训练 模型部署 预测性维护 应用开发流程 预测性维护应用从开发流程而言 和标准的机器学习类应用有其相似性 通常而言包括如下的五步法 数据获取 数据处理 特征提
  • 分布式一致性协议——CAP Paxos Raft ZAB

    一致性算法 Paxos Raft ZAB 1 1 CAP理论 分布式系统的CAP理论 理论首先把分布式系统中的三个特性进行了如下归纳 一致性 C 在分布式系统中的所有数据备份 在同一时刻是否同样的值 等同于所有节点访问同一份最新的数据副本
  • hibernate框架入门

    1 在IDE中创建java项目 比较简单不再演示 2 创建source folder 命名为Hibernate3 在Hibernate下载文件中找到我们所需要的三个配置文件和所有jar包 拷贝所需jar文件 构建依赖包 3 提供hibern
  • 2207. 字符串中最多数目的子字符串

    leetcode力扣刷题打卡 题目 2207 字符串中最多数目的子字符串 描述 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern 两者都只包含小写英文字母 你可以在 text 中任意
  • 使用Java流进行输入和输出操作

    使用Java流进行输入和输出操作 Java流是一种用于在程序中进行输入和输出操作的重要工具 流可以将数据从一个地方传输到另一个地方 例如从文件读取数据或将数据写入文件 在Java中 流被广泛用于处理输入和输出 以及进行网络通信 文件操作等
  • Python副业兼职,月赚7800元,一天只要两小时 !

    现在学习python的人越来越多了 跟大家聊聊如何利用python搞副业赚钱 想要利用 Python 赚钱的方式还是比较多的 其中接单和投稿算是两种比较简单的方式了 如果你是业余学python爬虫 可以去淘宝上加了找了几个店铺直接问需要爬虫
  • 编译报错:TypeError: Cannot read property ‘styles‘ of undefined at Object.loader

    编译报错 TypeError Cannot read property styles of undefined at Object loader 如下图 因为我的vue loader的版本是17以上 太高了 需要降到15的版本 我重新下的版
  • vue 异步加载远程组件(支持编译less语法)

    本代码已组件化 可以直接使用 说明 本组件可以直接解析 vue文件 为了支持less语法解析 在组件中引入less js 可在less官网下载 组件代码
  • 戴尔r510服务器不显示,戴尔 服务器dell R510 与 dell R710 对比

    戴尔台式机DELL服务器R510与R710的区别 戴尔台式机DELL服务器R510和R710有好多相同之处 1 都是2U服务器 2 都是双CPU服务器 3 所用CPU都是INTEL5500系列CPU 4 所用内存也是同样型号 R410 R5
  • PTA(Basic Level) 1094 谷歌的招聘

    2004 年 7 月 谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌 如下图 用于招聘 内容超级简单 就是一个以 com 结尾的网址 而前面的网址是一个 10 位素数 这个素数是自然常数 e 中最早出现的 10 位连续数字 能找出这个
  • 【点云】Large-scale Point Cloud Semantic Segmentation with Superpoint Graphs

    目录 1 摘要 2 介绍 3 方法 3 1 基于全局能量的集合分割 3 2 建立超点图 3 3 嵌入超点 3 4上下文分割 1 摘要 我们提出一个基于深度学习的框架 来解决大规模点云的语义分割问题 我们认为点云的组织形式可以被SPG Sup
  • 简单了解单点登录及实现方案

    代码演示基于springboot 一 单应用单节点登录认证 任何一个应用系统都离不开登录认证过程 实现登录认证主要目的是对系统的权限管理 在单应用单节点下常用做法通常采用session认证机制 其主要流程如下 客户端访问登录接口 传递用户名
  • i219-v不支持服务器,网络适配器中找不到Intel(R) Ethernet Connection I219-V该怎么解决?在虚拟机配...

    是因为网络适配器权限问题 1 打开网络连接 如下图 2 打开本地连接的属性 选择高级菜单 并将Internet连接共享的勾都打上 3 然后选择无线网卡进行专用网络连接 4 设置之后 您可以看到本地连接有一个手形图标 表明它是一个共版享状态
  • 三极管饱和及深度饱和状态的理解和判断!

    三极管饱和问题总结 1 在实际工作中 常用Ib V R作为判断临界饱和的条件 根据Ib V R算出的Ib值 只是使晶体管进入了初始饱和状态 实际上应该取该值的数倍以上 才能达到真正的饱和 倍数越大 饱和程度就越深 2 集电极电阻 越大越容易
  • 单选按钮input[type=radio],加上disabled后按钮颜色失效,始终默认为灰色

    在前端使用单选按钮input type radio 时 渲染后台数据时将单选按钮设为不可修改 给input加上disabled后 按钮颜色变灰 且通过css修改样式也无法改变 通过百度尝试了类似以下方式的几种修改css样式的常用办法解决 但
  • 【Android学习】导入别人的Android项目到AS中

    更新 最好直接导入 有错误再根据对应错误修改 学习阶段 下载学习他人的项目是必不可少的一步 但是新手又常常会遇到各种奇葩的问题 问题不可怕 可怕是自己退缩 总结下自己的一些经验 望对后来的你有所帮助 一 快速更改 在移植别人项目之前 最好先
  • 华为机试题69-矩阵乘法

    描述 如果A是个x行y列的矩阵 B是个y行z列的矩阵 把A和B相乘 其结果将是另一个x行z列的矩阵C 矩阵的大小不超过100 100 输入描述 第一行包含一个正整数x 代表第一个矩阵的行数 第二行包含一个正整数y 代表第一个矩阵的列数和第二
  • 20210220--CTF小笔记之常见的md5碰撞

    欢迎大家一起来Hacking水友攻防实验室学习 渗透测试 代码审计 免杀逆向 实战分享 靶场靶机 求关注 0e开头的md5和原值 QNKCDZO 0e830400451993494058024219903391 s878926199a 0e
  • 小程序内嵌webview实现支付

    点击上方 青年码农 关注 回复 特效源码 可获取各种资料 目前的一个小程序项目需要把客户之前的h5页面嵌入到现在的小程序中 并且之前的支付功能要正常 小程序提供了webview开放能力供我们使用 但是不允许在webview直接调起微信支付
  • 重载的分析

    前言 在c 中 出现重载的概念 其实就是一个高级语言的象征 他的出现就是机器语言更加的自然化 他其实可以理解位我们自然语言中的动词 它可以和不同的名词起到不同的功能 重载 定义 用一个相同的函数名来定义不同的函数 重载的条件 参数的个数不同