C++修炼之练气期第二层——缺省参数

news2024/9/23 7:24:41

目录

1.缺省参数的概念

2.缺省参数的分类

全缺省参数

半缺省参数 

实用场景示例


1.缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。

在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参

#include <iostream>
using namespace std;

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

int main()
{
	F();//未指定实参,使用参数的默认值

	F(10);//传参时,使用指定的实参

	return 0;
}

2.缺省参数的分类

全缺省参数

void F(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()
{
	F(100);
	F(100, 200);
	F(100, 200,300);
	
	//传参时,必须从左往右依次给
	//错误示例:
	//F(100, ,300);
	return 0;
}

半缺省参数 

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

int main()
{
	F(100,200);
	F(100, 200, 300);

	return 0;
}

 

注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给

//错误示例
void F(int a=10, int b, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

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

//错误示例
//test.cpp中定义

F(int a = 10);

//test.h中声明

F(int a = 20);
//编译器会报错

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

4. C语言不支持(编译器不支持)

实用场景示例

在之前数据结构的学习中,我们经常用到某个函数给来实现对某种数据结构的初始化(以栈为例);

struct Stack
{
	int* a;
	int top;
	int capacity;
};

void StackInit(struct Stack* ps)
{
	int capacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
	ps->a = (int*)malloc(sizeof(int) * capacity);

	if (ps->a == NULL)
	{
		perror("malloc fail");
		return;
	}

	//...
}

这样的写法有一个缺点,不管我们需要多大的空间,每次调用初始化函数时第一次都只能开辟4的空间,看着很呆板。

但是运用缺省参数改进后:

void StackInit(struct Stack* ps, int defaultcapacity=4)
{

	ps->a = (int*)malloc(sizeof(int) * defaultcapacity);

	if (ps->a == NULL)
	{
		perror("malloc fail");
		return;
	}

	//...
}

当我们想指定开辟多大空间时只需要多传一个参数就可以了,否则默认为4。

当然除了这样的使用场景,缺省参数可以运用于很多很多场景,使得代码灵活性更高!

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

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

相关文章

DETR(DEtection TRansforme)调试记录

下载地址&#xff1a; https://github.com/facebookresearch/detr 调试过程开始了 环境配置 我们依旧使用的是NVIDIA T4 GPU 服务器 创建conda环境 conda create -n detr python3.8conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -c pyto…

Spring Boot 3.0系列【1】开篇之Spring Boot 3.0 版本新特性

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本&#xff1a;3.0.3 文章目录导读Spring Boot 简介简要发展史核心功能Spring Boot 3.0 新特性JDK 版本要求&#xff08;重点&#xff09;GraalVM 本地镜像支持&#xff08;重点&am…

RPC编程:Hessian RPC一个老的RPC框架(一)

RPC编程&#xff1a;Hessian RPC一个老的RPC框架一&#xff1a;Hessian RPC1&#xff1a;Hession RPC一个老的RPC框架2&#xff1a;老&#xff0c;为什么还要研究&#xff1f;3&#xff1a;Hession RPC概念二&#xff1a;Hessian RPC设计思想1&#xff1a;Hession依赖于服务器2…

卡方检验

一、卡方检验假设检验的一种&#xff0c;以实际观测值与期望值之间的偏离程度&#xff0c;解决是服从某个构成比率和是否具有相关性的问题。其偏离程度决定卡方值的大小&#xff0c;卡方值越小&#xff0c;偏差越小&#xff0c;实际值越趋于符合期望值。二、步骤在显著性为α0.…

如何防止DNS污染?

对于DNS污染&#xff0c;一般除了使用代理服务器和VPN之类的软件之外&#xff0c;并没有什么其它办法。但是利用我们对DNS污染的了解&#xff0c;还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题&#xff0c;从而在不使用代理服务器或VPN的情况下访问原本访问…

大数据算法重点

1 大数据亚线性空间算法 场景&#xff1a;用二进制存储一个数字N&#xff0c;需要log(N)的空间 问题&#xff1a;如果N特别大而且这样的N又特别的多&#xff0c;该怎么办呢&#xff1f; 思路&#xff1a;减少一些准确性&#xff0c;从而节省更多的空间。 解决办法&#xff1a;使…

CentOS8基础篇8:使用systemctl管理NFS服务

一、服务简介 服务&#xff1a;是指执行指定系统功能的程序、例程或进程&#xff0c;以便支持其他程序&#xff0c;尤其是底层(接近硬件)程序。 例如&#xff1a;打印服务&#xff0c;ftp服务&#xff0c;http服务。 服务就是一个程序&#xff08;正在执行的程序&#xff09…

GG-21 100V 5A逆功率继电器

1 用途 GG-21逆功率继电器在出现逆功率时&#xff0c;从电网中断开交流发电机。 2 概述 逆功率继电器是基于感应式原理(具有旋转磁场)而工作。 继电器导磁体由两个磁路系统组成&#xff1a;上磁路系统和下磁路系统。电流线圈安装在上磁路系统中&#xff0c;它由接在发电机某相的…

机器学习|机器学习概述

目录 &#x1f4da;关于机器学习 &#x1f4da;监督学习和无监督学习 &#x1f430;监督学习 &#x1f430;无监督学习 &#x1f440;小结 &#x1f4da;关于机器学习 &#x1f308;在计算机中&#xff0c;“经验”通常以数据的形式存在。机器学习最主要的一项工作就是基…

MongoDB 详细教程,这一篇就够啦

文章目录1. 简介2. 特点3. 应用场景4. 安装&#xff08;docker&#xff09;5. 核心概念5.1 库5.2 集合5.3 文档6. 基本操作6.1 库6.1.1 增6.1.2 删6.1.3 改6.1.4 查6.2 集合6.2.1 增6.2.2 删6.2.3 改6.2.4 查6.3. 文档6.3.1 增6.3.2 删6.3.3 改6.3.4 查1. 语法2. 对比语法3. AN…

springboot使用Gateway搭建网关服务及Nacos实现动态路由

实际工作中我们会有很多个项目&#xff0c;这些项目共同使用同一个网关gateway来实现路由&#xff0c;各个项目之间调用以及前端调用都可以直接通过服务名称来调用&#xff0c;不用管ip&#xff0c;后续项目迁移到其它服务器也不受影响。 首先搭建springboot微服务&#xff0c…

智慧扫码点餐系统源码

智慧餐厅扫码点餐小程序系统源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Saas 模式 5. 带调试部署视频 6、总后台管理端商家端门店端小程序用户端 智慧扫码点餐系统支持多店铺运营&#xff0c;单店铺运营以及连锁店铺运营。系统功能支…

服务案例|基于IT事件管理,提升业务连续性

数字化经济时代&#xff0c;IT架构复杂性越来越高&#xff0c;业务连续性成为很多行业或企业最核心的任务。业务连续性管理是一个不断提升的过程&#xff0c;围绕事件“发现-响应-定位处理-降低发生”的事件处理思路&#xff0c;结合平台化运维&#xff0c;助力业务快速提升。 …

leetcode-每日一题-1144(中等,贪心,数学)

这道题说实话理清楚的话很简单&#xff0c;就是很容易绕进去&#xff0c;刚开始绕进去了很难受&#xff0c;解了半天才出来。。。。给你一个整数数组 nums&#xff0c;每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一&#xff0c;则数组 A 就是 锯齿…

Pytest自动化测试框架-权威教程01-安装及入门

安装及入门Python支持版本: Python 2.6,2.7,3.3,3.4,3.5,Jython,PyPy-2.3支持的平台: Unix/Posix and WindowsPyPI包名: pytest依赖项: py,colorama (Windows)PDF文档: 下载最新版本文档Pytest是一个使创建简单及可扩展性测试用例变得非常方便的框架。测试用例清晰、易读而无需…

【离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载】

离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载一、交易域用户商品粒度订单最近1日/N日汇总表1.交易域用户商品粒度订单最近1日汇总表2.交易域用户商品粒度订单最近N日汇总表二、交易域优惠券粒度…

华为OD机试模拟题 用 C++ 实现 - 通信误码(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明通信误码题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,

(二)Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例

Markdown编辑器使用指南 &#xff08;一&#xff09;Markdown编辑器的使用示例 | 以CSDN自带MD编辑器为例&#xff08;二&#xff09;Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xf…

Hbase预分区参考

背景 我们都知道hbase的数据是分布在多台RegionServer角色的机器上的&#xff0c;每个RegionServer都有一到多个Region管理不同rowkey范围的数据,所以建表前通过合理的Region的分区及数量&#xff0c;可以避免热点读写问题和充分利用各RegionServer的资源&#xff0c;vmaster-h…

五、线程池

文章目录什么是线程池JDK自带的构建线程池的方式newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduleThreadPoolnewWorkStealingPoolThreadPoolExecutor应用&源码剖析为什么要自定义线程池ThreadPoolExecutor应用ThreadPoolExecutor源码剖析ThreadPo…