c++:缺省参数,函数重载
今天介绍的是cpp中的缺省参数以及函数重载的知识。
首先我们先看看缺省参数:
缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
例如:
#include<iostream>
using namespace std;
int add(int num1 = 1,int num2 = 1)
{int a = num1 + num2;return a;
}
int main()
{int ret = add();cout << ret << " " << endl;return 0;
}
正如代码中所写的我在调用add函数的时候并没有给add函数传输值,但是代码的运行结果是这样的:
这就是缺省参数的作用。它可以让我们在暂时没有想法给函数传什么参数时可以先给函数有一个运行结果。在后面我们可以用来做一些初始化的工作等等。
缺省参数可以分为全缺省和半缺省
int add(int num1 = 1,int num2 = 1)
{int a = num1 + num2;return a;
}
全缺省是指需要传入的所有参数都有一个缺省值。
void func(int a,int b = 10,int c = 20 )
{cout << a << endl;cout << b << endl;cout << c << endl;}
半缺省就是有的参数没有给缺省值。
缺省参数中也有一些需要我们注意的地方,比如说:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现

当我们在声明和定义中同时缺省时会有以上报错。
所以我们可以将定义中的缺省值删掉保留定义中的缺省值。
3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)
函数重载
函数重载:是函数的一种特殊情况,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++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

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+函数长度
+函数名+类型首字母】

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

结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参
数类型信息添加到修改后的名字中。
6. 通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修
饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。
7. 如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办
法区分。
相关文章:
c++:缺省参数,函数重载
今天介绍的是cpp中的缺省参数以及函数重载的知识。 首先我们先看看缺省参数: 缺省参数 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。 例如&#…...
深度学习算法面试常问问题(二)
X86和ARM架构在深度学习侧的区别? X86和ARM架构分别应用于PC端和低功耗嵌入式设备,X86指令集很复杂,一条很长的指令就可以完成很多功能;而ARM指令集很精简,需要几条精简的短指令完成很多功能。 影响模型推理速度的因…...
美国CPC认证是什么?儿童玩具亚马逊CPC认证审核有哪些问题?
很多卖家都有遭遇listing下架,被要求提供CPC认证报告。这是因为亚马逊有时会加强对儿童产品的审查。本文带大家对CPC认证进行一个全面了解。什么是CPC认证?CPC认证,全称ChildrensProductCertification.是认可实验室,根据产品不同适…...
恭喜! SelectDB 五位开发者成为 Apache Doris 新晋 PMC 成员和 Committer!
近期,通过 Apache Doris 项目管理委员会的推荐与投票,Apache Doris 社区正式迎来了 2 位新晋 PMC 成员 和 8 位新晋 Committer 的加入。值得关注的是,2 位新晋 PMC 成员均来自 SelectDB,分别是衣国垒(yiguolei…...
数据库面试题
第一范式(1NF) 第一范式是指数据库的每一列都是不可分割的基本数据项,而下面这样的就存在可分割的情况: 学生(姓名,电话号码) 电话号码实际上包括了家用座机电话和移动电话,因此它…...
[USACO2022-DEC-Bronze] T2 Feeding the Cows 题解
一、题目描述Farmer John has N (1≤N≤10^5) cows, the breed of each being either a Guernsey or a Holstein. They have lined up horizontally with the cows occupying positions labeled from 1…N.Farmer John 有 N(1≤N≤105)头奶牛,…...
Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)
Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)写在前面1、为什么用法线贴图?2、用什么存法线?3、法线向量为什么存在切线空间?法线贴图存得是什么?4、法线贴图为什么会偏蓝…...
【JavaWeb】传输层协议——UDP + TCP
目录 UDP协议 UDP协议结构 UDP的特点 TCP协议 TCP协议结构 TCP的特点 TCP的十个核心机制 确认应答 超时重传 连接管理 滑动窗口 流量控制 阻塞控制 延迟应答 捎带应答 粘包问题 异常处理 UDP协议 UDP协议结构 源端口:存储的是发送方的端口号。 目的…...
C++ 中是用来修饰:内置类型变量、自定义对象、成员函数、返回值、函数参数
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 一. const修饰 普通类型的变量 const int a 7; int b a; // 正确 …...
av 146 002
61. 一个新的敏捷项目经理正试图确定团队该如何执行一个发布计划的进度。哪种工具可以更深入地了解团队的进展? A. 发布计划系统 B. 产品路线图。 C. 看板。 D. 燃尽图 62. 你的项目发起人找到你,让你知道他正在考虑给你项目中的一位高级工程师颁发1000美元的现…...
小红书用户画像 | 小红书数据平台
小红书的用户画像是小红书品牌营销的必备技能,也是小红书推广种草的一个重要前提。通过对小红书用户画像进行分析,对品牌进行精准营销,实现更高的流量转化。 2022小红书粉丝人群画像 千瓜数据在2022年发布的千瓜活跃用户画像趋势报告中分析了…...
【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑
【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案) blog.csdn.net/weixin_534033…...
Linux内存分区(swap)
目录 1、使用物理分区创建内存交换分区 2、使用文件创建内存交换文件 当硬件的设备资源充足的话,那么swap是不会被我们的系统所使用到的,所以swap会被利用到的时刻通常就是物理内存不足的情况 我们知道CPU所读取的数据都来自于内存,那么当…...
第六章——抽样分布
文章目录1、统计量的定义2、常用的统计量3、经验分布函数4、正态总体常用统计量的分布4.1、卡方分布4.1.1、卡方分布的定义4.1.2、卡方分布的性质4.2、t分布4.2.1、t分布的定义4.2.2、t分布的性质4.3、F分布4.3.1、F分布的定义4.3.2、F分布的性质5、正态总体的样本均值与样本方…...
蓝桥云课-声网编程赛(声网编程竞赛7月专场)题解
比赛题目快速链接:https://www.lanqiao.cn/contests/lqENT02/challenges/ 让时钟转起来(考点:css:transform) // index.js function main() {// 题解前理解一个东西:// 时针每过一小时,转30 原…...
Java高手速成 | Java web 实训之投票系统
01、投票系统的案例需求 在本篇中,我们将制作一个投票系统,让学生给自己喜爱的老师投票。该系统由1个界面组成,系统运行,出现投票界面,如图所示: ▍显示效果 在这个界面中,标题为:“欢迎给教师投票”;在界面上有一个表格,显示了各位教师的编号、姓名、得票数;其中…...
排序的基本概念
按数据存储介质:内部排序和外部排序按比较器个数:串行排序和并行排序按主要操作:比较排序和基数排序插入排序:基本思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象…...
面试笔试资料--Java
这里写自定义目录标题1.同步和异步有何异同?在什么情况下分别使用他们?举例说明1.同步和异步有何异同?在什么情况下分别使用他们?举例说明 1.1概念 Java中交互方式分为同步和异步两种: 同步交互:指发送…...
基于TC377的MACL-ADC General配置解读
目录标题一、MACL-ADC General1.Config Variant与AdcConfigSet2. AdcGeneral3.AdcPublishedInformation二、最终对应达芬奇生成内容一、MACL-ADC General 1.Config Variant与AdcConfigSet Config Variant :变体配置,默认选择VariantPostBuild就好了&…...
error: src refspec master does not match any.处理方案
问题描述 在使用git bash指令将项目上传到github时,总是遇到一些错误无法解决。 下面是我遇到的一个问题 error: src refspec master does not match any. error: failed to push some refs to XXXX.git 原因分析: 错误:SRC ReFSPEC主控器不…...
使用Docker部署Qwen3-TTS语音生成服务
使用Docker部署Qwen3-TTS语音生成服务 1. 引言 语音合成技术正在改变我们与机器交互的方式,而Qwen3-TTS作为开源领域的佼佼者,提供了高质量的语音生成能力。传统的部署方式往往需要复杂的环境配置和依赖安装,这让很多开发者望而却步。 Doc…...
HunyuanVideo-Foley惊艳效果:AI生成的赛博朋克城市雨夜环境音效
HunyuanVideo-Foley惊艳效果:AI生成的赛博朋克城市雨夜环境音效 1. 效果展示:赛博朋克音效的沉浸式体验 HunyuanVideo-Foley 私有部署镜像带来的音效生成能力,让AI创作达到了专业音频工程师的水准。我们以"赛博朋克城市雨夜"为场…...
import/export:前端模块化实战|JS 基础语法与数据操作篇
【ES Modules】前端模块化实战:从代码拆分逻辑到落地实操,彻底搞懂import/export的最佳写法,避开模块化高频坑! 📑 文章目录 一、先体验一下:没有模块化有多难受 1.1 一个真实的场景1.2 模块化能做到的三件…...
langchain核心组件1-智能体
这里写目录标题简介基础使用静态模型使用动态模型简介 langchain版本 v1.x 在此版本中,langchain可以创建一个智能体 基础使用 我日常使用因为是直接对话,所以基本上只需要以下几个组件 model: 定义智能体大脑,是大语言模型地…...
洛谷 P1145:[CERC 1995] 约瑟夫 ← 队列 + 优化
【题目来源】 https://www.luogu.com.cn/problem/P1145 【题目描述】 2k 个人站成一圈,从某个人开始数数,每次数到 m 的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。现在有一圈人,k 个好人站在一起&#…...
ChatTTS API 实战:如何构建高可用的 AI 辅助开发工作流
最近在做一个需要大量语音合成的项目,用到了 ChatTTS API。说实话,直接调用 API 虽然简单,但一旦涉及到生产环境的高并发、稳定性和成本控制,问题就接踵而至。经过一番折腾,我总结了一套基于 Python 异步编程的高可用工…...
告别格式烦恼!3个让视频播放丝滑的小妙招
周末窝在沙发上追剧,结果播放器突然弹出"格式不支持"的提示;精心拍摄的旅行vlog想分享给朋友,却发现文件太大传不过去——这些视频格式的小麻烦,是不是让你头疼过?其实掌握几个实用技巧,就能让视…...
嵌入式系统开发核心技术解析与实践
嵌入式系统开发核心技术专题1. 嵌入式开发基础体系1.1 C语言核心要点在嵌入式开发中,C语言作为最接近硬件的编程语言,需要掌握以下关键技术点:指针深度应用:包括函数指针、回调函数实现、内存操作等核心概念内存管理机制ÿ…...
3大核心能力实现高效水印移除:WatermarkRemover-AI全解析
3大核心能力实现高效水印移除:WatermarkRemover-AI全解析 【免费下载链接】WatermarkRemover-AI AI-Powered Watermark Remover using Florence-2 and LaMA Models: A Python application leveraging state-of-the-art deep learning models to effectively remove …...
**发散创新:用Go语言构建高性能服务网格代理——从零实现Sidecar模式**在微服务架构日益普及的今天,
发散创新:用Go语言构建高性能服务网格代理——从零实现Sidecar模式 在微服务架构日益普及的今天,服务网格(Service Mesh) 已成为保障流量治理、安全认证与可观测性的核心基础设施。传统基于API网关的集中式控制方式已难以满足动态…...
