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

【C++ | 函数】默认参数、哑元参数、函数重载、内联函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:2024-05-04 15:18:51

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、默认参数
    • ✨2.1 默认参数
    • 🌰2.2 举例子
  • 🎄三、哑元参数
  • 🎄四、函数重载
    • ✨4.1 函数重载
    • 🌰4.2 举例子
  • 🎄五、内联函数
  • 🎄六、总结


在这里插入图片描述

🎄一、概述

C++的函数在C语言的函数基础上增加了一些新的特性,如:函数重载、默认参数、哑元参数、内联函数。

本文主要介绍C++在函数增加的一些新的特性,并举例子来对这些特性加深理解。

在这里插入图片描述

🎄二、默认参数

这个小节介绍C++相对于C语言新增的一项内容:默认参数。

✨2.1 默认参数

默认参数指的是当函数调用中省略了实参时自动使用的一个值。

其具体做法是,在函数声明时给函数参数指定一个默认值,如果调用函数时没有给这个参数传入实参,则使用默认值,如果传入了实参,则替换掉默认值。

参数的默认值要保持靠右原则,如果一个参数有默认值,则参数右边所有的参数都必须有默认值。

当函数的声明和实现分开时,则需要在声明时指定默认值,实现不能再指定。


🌰2.2 举例子

下面看看例子加深理解

// 06_default_param.cpp 
// g++ 06_default_param.cpp
#include <iostream>using namespace std;void print_int(int i=-1)
{cout << "i=" << i << endl;
}// 当函数的声明和实现分开时,则需要在声明时指定默认值,实现不能再指定。
void print_double(double d=1.1);
void print_double(double d/*=1.0*/)
{cout << "d=" << d << endl;
}int main()
{print_int();	// 不给实参,打印默认值 -1print_int(10);	// 传入实参,打印 10print_double();print_double(2.1);return 0;
}

运行结果:
在这里插入图片描述


在这里插入图片描述

🎄三、哑元参数

如果一个函数的参数,只有类型,没有参数名,则这个参数叫哑元。

哑元的作用:

  • 让无参的函数,参数匹配更加严格
    void fun_a();
    void fun_b(void); // 明确指出该函数没有参数
    
  • 保持函数向前兼容。某个函数以前是某个参数的,现在不使用该参数了,可以只保留类型。
    void fun_decode(int key); // 以前的函数
    void fun_decode(int); // 现在的函数,保留类型,避免旧的调用出错
    
  • 区分函数
    operator++(){/* 这是默认的前加加 */ 
    }
    operator++(int){/* 这是默认的后加加 */ 
    }
    

在这里插入图片描述

🎄四、函数重载

✨4.1 函数重载

函数重载,有些书籍也把它叫做函数多态,是指“同样函数名的多个函数,可以具有不同的参数列表和功能”的一种现象。

函数重载有点像多义词,例如:“吃狗粮”,有时指狗吃狗粮,有时指人吃狗粮。

重点:函数重载的关键是函数的参数列表,也称为函数特征标(function signature)。如果两个函数的参数数目、参数类型、参数的排列顺序都相同, 则它们的特征标相同,而变量名、函数返回值类型是无关紧要的。 C++允许定义名称相同的函数,条件是它们的特征标不同。可以参考下面例子理解:

// 1.函数参数个数不同,所以函数特征不一致。
int fun_a(int a);
int fun_a(int a, int b);// 2.函数参数类型不同,所以函数特征不一致。
int fun_a(int a);
int fun_a(char a);// 3.函数参数排列顺序不同,所以函数特征不一致。
int fun_a(int a, char c);
int fun_a(char a, int c);// 4.函数参数的数目、类型、参数排列顺序都相同,所以函数特一致。与参数名、返回值类型无关
int fun_a(int a, char c, short s);
int fun_a(int i, char j, short k);
void fun_a(int i, char j, short k);

重载函数匹配的步骤:

  • 1、选择候选函数(candidate function):候选函数的2个特征,一是要求与被调用函数同名;二是其声明在调用的地方可见。
  • 2、选择可行函数(viable function):可行函数的两个特征,一是形参与调用函数时提供的实参数量相等;二是实参与形参的类型相同,或是能转换成形参的类型。
  • 3、从可行函数中选择与本次调用最匹配的函数,实参与形参的类型🈷接近越匹配。

何时使用函数重载:仅当函数基本上执行相同的任务, 但使用不同形式的数据时,才应采用函数重载。


🌰4.2 举例子

// 06_overload.cpp 
// g++ 06_overload.cpp
#include <iostream>using namespace std;void print_fun(int i, double d)
{cout << "print_fun_i_d" << endl;
}void print_fun(double d, int i)
{cout << "print_fun_d_i" << endl;
}int main()
{int i = 1;double d = 1.2;print_fun(i, d);print_fun(d, i);//print_fun(i, 3.0f);//print_fun(d, 3);return 0;
}

在这里插入图片描述

🎄五、内联函数

内联函数是 C++为提高程序运行速度所做的一项改进。

内联函数比普通函数多一个inline修饰,编译器会在编译期间 将内联函数的函数代码替换掉函数调用。这样操作使得程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。

inline int getmax(int x,int y){return x>y?x:y;
}
cout << getmax(x,y) << endl; // 在编译过程被替换为 cout << (x>y?x:y) << endl;

注意:内联说明只是向编译器发出的一个请求, 编译器可以选择忽略这个请求。

一般来说,内联机制用于优化规模较小、流程直接、频繁调用的函数。

🌰举例子:

// 06_inline.cpp 
// g++ 06_inline.cpp
#include <iostream>using namespace std;inline int getmax(int x,int y){return x>y?x:y;
}
#define GETMAX(X,Y) (((X)>(Y))?(X):(Y))
int main(){int x=123, y=100;cout << getmax(x,y) << endl; // 在编译过程被替换为 cout << (x>y?x:y) << endlcout << GETMAX(123,100) << endl; // 在预处理过程被替换return 0;
}

在这里插入图片描述

🎄六、总结

👉本文介绍C++相对于C语言新增的几个函数特性:默认参数、哑元参数、函数重载、内联函数,并举例子加深理解。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关文章:

【C++ | 函数】默认参数、哑元参数、函数重载、内联函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-04 1…...

Spring事件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 Spring事件 简洁 Spring Event&#xff08;Application Event&#xff09;就是一个观察者模式&#xff0c;一个bean处理完任务后希望通知其他Bean的…...

mysql安装及基础设置

关系型数据库 MySQL是一种关系型数据库管理系统&#xff0c;采用了关系模型来组织数据的数据库&#xff0c;关系数据库将数据保存在不同的表中&#xff0c;用户通过查询 sql 来检索数据库中的数据。 yum 方式安装 mysql # yum -y install mysql-server # systemctl start my…...

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…...

【无标题】vue webrtc 播放rtsp视频流

最近有个小活其中有涉及播放大华及海康摄像头视频流的需求&#xff0c;经调查发现可以使用webrtc来实现相关功能&#xff0c;记录一下&#xff0c;步骤如下&#xff1a; &#xff11;、下载webrtc &#xff1a;Releases mpromonet/webrtc-streamer GitHub winows下下载&…...

redis进阶--IDEA环境

目录 一、解决redis服务器端口问题 二、java环境下使用redis 三、javaSpringt环境下使用redis 四、redis持久化 1、持久化概念 2、redis持久化策略 3、RDB策略 4、AOF策略 5、混合持久化策略 五、redis事务 1、数据库事务 2、redis事务特点 3、redis事务的作用 4…...

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布&#xff0c;发布了 8B 和 70B 参数量的模型&#xff0c;lmdeploy团队对 Llama 3 部署进行了光速支持&#xff01;&#xff01;&#xff01; 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…...

SK Hynix 探索超低温技术,开启400层以上3D NAND制造新时代

随着存储技术的飞速发展&#xff0c;SK Hynix作为韩国存储巨头&#xff0c;正以前沿的制造技术引领行业变革。据韩国媒体TheElec独家报道&#xff0c;SK Hynix正积极研究在超低温条件下生产3D NAND闪存的可能性&#xff0c;此举有望助力其下一代产品突破400层的技术瓶颈&#x…...

【OceanBase诊断调优】—— 如何排查 server 断连接问题

本文介绍如何排查 server 断连接问题。 断开连接的常见原因 协议层异常 发送报文时遇到发生一些非预期的错误&#xff0c;server 将会发生主动断开连接。 事务异常 包括 rollback 失败或 commit 失败。 Query 异常 已输出行数据&#xff0c;但 server 内部发生错误。 Proce…...

基于Vant UI的微信小程序开发(随时更新的写手)

基于Vant UI的微信小程序开发✨ &#xff08;一&#xff09;悬浮浮动1、效果图&#xff1a;只要无脑引用样式就可以了2、页面代码3、js代码4、样式代码 &#xff08;二&#xff09;底部跳转1、效果图&#xff1a;点击我要发布跳转到发布的页面2、js代码3、页面代码4、app.json代…...

力扣数据库题库学习(5.7日)--1757. 可回收且低脂的产品

1757. 可回收且低脂的产品 问题链接&#x1f4a6; 思路分析 编写解决方案找出既是低脂又是可回收的产品编号。 返回结果 无顺序要求 。看示例&#xff1a; 输入&#xff1a; Products 表&#xff1a; ----------------------------------- | product_id | low_fats | recy…...

支付宝——图技术在金融反欺诈中的应用

目录 图在金融反欺诈中的应用背景 图驱动的感知研判决策处置 图在金融反欺诈中的演进 总结和展望...

【Docker学习】docker run的端口映射-p和-P选项

docker run的端口映射选项分为-p&#xff08;小写&#xff0c;全称--publish&#xff09;&#xff0c;-P&#xff08;大写&#xff0c;全称--publish-all&#xff09;&#xff0c;之前认为只有改变容器发布给宿主机的默认端口号才会进行-p的设置&#xff0c;而不改变默认端口号…...

乡村振兴与城乡融合发展:加强城乡间经济、文化、社会等方面的交流与合作,推动城乡一体化发展,实现美丽乡村共荣

目录 一、引言 二、乡村振兴与城乡融合发展的意义 三、城乡交流合作的现状与挑战 &#xff08;一&#xff09;现状 &#xff08;二&#xff09;挑战 四、加强城乡交流合作的策略与路径 &#xff08;一&#xff09;完善城乡交流合作机制 &#xff08;二&#xff09;推动…...

什么是职称评审?如何申报?怎么获取职称电子证书?

目录 一、什么是职称?什么是职称评审? 二、申报人申报职称评审要经过哪些流程?...

PC小程序解密及反编译

一、小程序包解密 小程序原始加密包位置C:\Users\administrator\Documents\WeChat Files\Applet\wx234324324324 二、wxappUnpacker反编译 npm install./bingo D:\temp\小程序包解密\wxpack\wx234324324324.wxapkg 三、查看反编译后的文件...

【吃透Java手写】4-Tomcat-简易版

【吃透Java手写】Tomcat-简易版-源码解析 1 准备工作1.1 引入依赖1.2 创建一个Tomcat的启动类 2 线程池技术回顾2.1 线程池的使用流程2.2 线程池的参数2.2.1 任务队列&#xff08;workQueue&#xff09;2.2.2 线程工厂&#xff08;threadFactory&#xff09;2.2.3 拒绝策略&…...

开发中的一些专业术语,POJO、PO...

在 Java 开发中&#xff0c;以下是常见的设计模式和概念&#xff1a; PO&#xff08;Persistent Object&#xff09;&#xff1a;持久化对象&#xff0c;也称为实体类或数据对象。它是与数据库表结构对应的类&#xff0c;通常用于表示持久化数据的实体。PO 类的属性与数据库表的…...

79.网络游戏逆向分析与漏洞攻防-移动系统分析-利用数据包实现人物走路

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…...

JS基础:输出信息的5种方式详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...