【C++入门】缺省参数

news2024/10/9 4:15:51

目  录

  • 1 缺省参数
    • 1.1 缺省参数概念
    • 1.2 缺省参数分类
    • 1.3 缺省参数使用注意


1 缺省参数

1.1 缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 0) {
	cout << a << endl;
}

int main() {
	Func();//没有传参时,使用参数的缺省值
	Func(10);//传参时,使用指定的实参
	return 0;
}

运行结果:

示例运行结果

如上所示:缺省参数的缺省值就好比一个一直存在的“备胎”。函数 Func 中含缺省参数 a ,其缺省值为0。在第一次调用函数时,我们没有传参,因此使用参数的缺省值进行输出;在第二次调用函数时,传入了常量值10,因此函数使用传入的参数值进行输出。


1.2 缺省参数分类

  • 全缺省参数

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 10, int b = 20, int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	Func();
	return 0;
}

运行结果:

示例运行结果

说明: 所谓全缺省参数,顾名思义就是函数的所有参数都具有缺省值。如示例中所示,若采用全缺省参数,函数调用时,可以选择传全部参数,可以选择传部分参数,也可以不传参使用参数缺省值。但注意:调用函数时必须从左往右连续给缺省参数传参,不能间隔传参(或者说必须从右往左连续使用缺省值),如 Func(, 2,) 与 Func(, , 3) 的调用方法都是错误的。

  • 半缺省参数(部分缺省)

示例代码:

#include <iostream>

using namespace std;

void Func(int a, int b = 20, int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	return 0;
}

运行结果:

示例运行结果

说明: 所谓半缺省,并不是指给一半的参数设置缺省值,实际是只给部分参数设置缺省值。如示例中所示,函数 Func 中除了参数 a ,其余参数均设置有缺省值,此时调用函数,对于没设置缺省值的参数,必须进行传参,其余参数可使用缺省值。需要注意的是:同样,对于半缺省的参数,调用函数时也必须从右往左连续使用缺省值。且在声明和定义函数时也必须从右往左连续设置缺省参数的缺省值,如 void Func(int a = 10, int b, int c = 30); 的函数声明方法就是错误的。


1.3 缺省参数使用注意

  1. 缺省参数不能在函数声明和定义中同时出现

如:在test.h中声明函数 void Func(int a = 10, int b = 20, int c = 30); ,在test.cpp中定义函数 void Func(int a = 10, int b = 20, int c = 30){} ,运行时将会出现如下图中的报错,即使函数的声明和定义设置的缺省参数的缺省值是一样。而且如果二者可以同时出现的话,若恰巧两个位置提供的缺省值不同,那编译器就无法确定到底该用哪个缺省值。

错误说明

考虑到我们的代码中包含的 .h 头文件中通常是函数的声明,如果函数的声明和定义不在同一个文件中,则应在函数声明时设置缺省参数的缺省值,定义的时候则不需要再重复设置了。

  1. 缺省值必须是常量或者全局变量

  2. C语言的编译器不支持缺省参数


以上是我对C++中缺省参数的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!

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

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

相关文章

Spring Profiles 实现多环境配置 ,切换环境

Spring Profiles 实现多环境配置 Spring Profiles 就是针对应用程序&#xff0c;不同环境需要不同配置加载的一种解决方案。 使用场景: 我们平常项目开发&#xff0c;经常需要根据不同的环境进行配置的修改&#xff0c;比如在本地开发会加载本机的配置和开发环境数据库&#x…

【NKOJ-昨天今天和明天】考试游记

目录 昨天上午的序列 - 30pts今天上午的扫除 - 100pts明天上午的教室 - 100pts明天上午的数组 - 100pts明天上午的函数 - 100pts 题目排序太合理了,EDCBA依次变难,导致我对着A题苦思冥想了半小时...但是A题是[LeetCode 907. 子数组的最小值之和]的换皮题(除了题目一点没变)然…

初始OAuth2.0

1. 什么是OAuth2.0 OAuth2.0是目前使用非常广泛的授权机制&#xff0c;用于授权第三方应用获取用户的数据。 举例说明&#xff1a;用户可以通过选择其他登录方式来使用gitee&#xff0c;这里就使用到了第三方认证。 OAuth 引入了一个授权层&#xff0c;用来分离两种不同的角色…

前端工程化

一、前端工程化1、webpack&#xff08;1&#xff09;定义&#xff1a;是一个前端的构建工具。前端代码格式多&#xff08;html、css、js、图片&#xff09;&#xff0c;前端构建工具的作用是将各种格式不同文件打包到一起&#xff0c;方便项目的上线运行。&#xff08;将开发环…

Java学习笔记---干货

Java学习 一、java版本 JavaSE &#xff1a;标准版&#xff08;桌面应用程序、控制台程序&#xff09; JavaEE&#xff1a;E企业级开发&#xff08;Web端&#xff0c;服务器的开发&#xff09; JDK&#xff1a;Java开发工具 JRE&#xff1a;Java运行环境 JVM&#xff1a;…

通信原理笔记—基带信号的功率谱

目录 二进制纯随机序列基带信号的功率谱&#xff1a; 基带信号的功率谱分析&#xff1a; (1)信号(t)的功率谱&#xff1a; (2)信号v(t)的功率谱&#xff1a; 随机序列S(t)的功率谱&#xff1a; 二进制纯随机序列基带信号的功率谱&#xff1a; 基带信号的功率谱分析&#…

软件需求说明书确保正确性的6大关键点

软件需求说明书对软件开发项目非常关键&#xff0c;如何确保其正确性&#xff0c;关键有6大要点&#xff01; 1、需求与其他需求是否相互冲突或重复 一般需求规格说明书长达几百页&#xff0c;并不是一蹴而就的&#xff0c;因此可能出现前后观点的重叠或差异&#xff0c;或同一…

[HDCTF2019]Maze 题解

少欲则心静&#xff0c;心静则事简。 ——人民日报 1.查壳 是一个加了upx壳的32位EXE文件 2.使用Kali Linux脱壳 maze题目脱壳3.去除脏字节 没有找到主函数&#xff0c;发现这段汇编代码标红了&#xff0c;IDA分析崩溃&#xff0c;这是掺杂了花指令 这里jnz&#xff0c;不论判…

中国电子学会2022年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;三级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 一、单选题(共25题&#xff0c;共50分) 1. 以下四个选项中&#xff0c;运行哪个积木块&#xff0c;可能得到523这个数值&#xff1f;&…

25-35分布式事务seata

分布式事务Seata使用及其原理剖析 Seata的三大角色 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态&#xff0c;驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围&#xff1a;开始全局事务、提交或回滚全局事务。 RM…

devicetree和启动参数解析流程

devicetree和启动参数解析流程 文章目录devicetree和启动参数解析流程一、设备树解析概述二、early device tree 解析流程三、device node节点创建流程四、bootargs参数解析&#xff14;.1 bootargs参数配置&#xff14;.&#xff12; early param参数解析&#xff14;.&…

Docker - 2. Docker 工作原理

目录 1. Docker入门图解 2. Docker 整体架构和底层通讯原理 1. Docker入门图解 (1) Docker是一个Client-Server结构的系统&#xff0c;Docker守护进程(图中Docjer daemon)运行在主机上&#xff0c;然后通过Socket链接客户端往返&#xff0c;守护进程从客户端接收命令并管理在…

PySpark 之 SparkSQL 编程

1. DataFrame 的创建 1.1 RDD 和 DataFrame 的区别 RDD 是一种弹性分布式数据集&#xff0c;Spark中的基本抽象。表示一种不可变的、分区储存的集合&#xff0c;可以进行并行操作DataFrame是一种以列对数据进行分组表达的分布式集合&#xff0c; DataFrame等同于Spark SQL中的…

jvm宏观上类的加载机制整体和微观上通过类加载器进行加载的过程

说到一个词“类的加载”其实含有歧义&#xff0c;因为在jvm中可以说有一个宏观的&#xff0c;即整体上的类的加载&#xff0c;还有一个微观上的加载&#xff0c;也就是狭隘的通过类加载器的加载class文件的过程&#xff0c;这里介绍这两种“类的加载”。 类的整体加载过程(类加…

Windows C盘清理的正确方式,从此你告别红色烦恼

前言 伴随着电脑工作的时间越久&#xff0c;C盘常常会提示显示其内存已不足。 C盘容量不足将会极大影响系统的运行速度&#xff0c;电脑会变卡、死机。 今天&#xff0c;就给大家分享一个C盘空间清理终极解决方案&#xff1a; 1、利用Windows自己附带的磁盘清理工具 1&…

[oeasy]python0068_ 字体样式_正常_加亮_变暗_控制序列

字体样式 回忆上次内容 上次了解了一个新的转义模式 \33 逃逸控制字符 esc esc 让输出 退出标准输出流 进行控制信息的设置 可以清屏也可以设置光标输出的位置 还能做什么呢&#xff1f; 可以设置字符的颜色吗&#xff1f;&#xff1f;&#xff1f;&#x1f914; 查看细节…

BIC-2022-BDT:区块链和基于数字双胞胎的智能制造高效数据处理安全框架

摘要工业物联网具有智能连接、数据实时处理、协同监测、信息自动处理等特点&#xff0c;是物联网时代的重要组成部分之一。异构工业物联网设备对高数据速率、高可靠性、高覆盖、低延迟的要求&#xff0c;已成为信息安全领域的一大挑战。工业物联网中的智能制造产业需要多方协同…

(02)Cartographer源码无死角解析-(53) 2D后端优化→位姿图优化理论讲解、

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

【ardunio+sx1268】与【esp32+sx1268】实现不同主控单片机lora通讯

2023.21 在前文 esp32 sx1268 的 spi 驱动调通之后&#xff0c;又尝试 ardunio sx1268 驱动&#xff0c;实现不同主控对于lora模块 sx1268 的控制 文章目录1. 实验结果2.硬件描述2.1 sx12682.2 ardunio ATmega3283.接线实物图5.开发环境6.代码实现关于esp32sx1268 的驱动以及代…

爆款制作获1200w播放,B站UP主+品牌如何迈入2023

1月13日&#xff0c;bilibili 2022年度百大UP主已经揭开帷幕&#xff0c;今年延续2021年的评审标准&#xff0c;依然从专业性、影响力、创新性三个维度进行评选。来源-B站这套评审标准已经实施两年&#xff0c;早期的百大评选上榜的更多是来自知名度高、影响力广的UP主&#xf…