首页 > 编程语言 >C++缺省参数

C++缺省参数

时间:2024-01-24 11:45:48浏览次数:21  
标签:capacity int void 缺省 C++ 参数 默认值

缺省参数

什么是缺省参数呢?

简单来说,就是 函数的参数可以给一个默认值,如果不给这个函数传递参数的时候

那么改参数就是默认值 , 否则参数就是你指定的参数

缺省参数分为全缺省和半缺省

  • 全缺省参数: 所有的参数都有默认值
void func(int a=10,int b=20,int c=30)
{
    cout<<"a= "<<a<<endl;
    cout<<"b= "<<b<<endl;
    cout<<"c= "<<c<<endl;
}
int main()
{
    func();//此时 a,b,c都有默认参数,调用不传参
    return 0;
}
/****输出****/
// a= 10
// b= 20
// c= 30
  • 半缺省参数:不是所有的参数都有默认值,也就是说,必须要传递参数给没有默认值的参数
void func(int a,int b,int c=30)
{
    cout<<"a= "<<a<<endl;
    cout<<"b= "<<b<<endl;
    cout<<"c= "<<c<<endl;
}
int main()
{
    //因为a和b两个没有缺省,即最少传两个参数,此时调用错误
    // func();
    
    //正确调用
    func(99,999);
    return 0;
}
/****输出****/
// a= 99
// b= 999
// c= 30

注意事项

  1. 全缺省和半缺省参数都是从左向右传参,传一个参数默认给第一个形参

  2. 半缺省参数必须从右向左依次来给, 并且不能间隔着给

    之所以从右往左缺省是因为,传参是从左向右

    //这是间隔缺省的例子,是错误的
    void func3(int a, int b = 20, int c)
    {
    	/******/
    }
    
  3. 缺省参数不能在函数声明和定义中同时出现,否则会提示重定义默认参数的问题. 原因是因为如果声明和定义给的默认值是一样的,那么就不知道该设置哪一个为默认值了

    规定: 默认参数(缺省参数) 在声明中给定

    // test.h中
    void func(int b, int a, int c = 20);
    // test.c中
    void func(int b, int a, int c /* = 20*/)
    {
        /******/
    }
    
  4. 缺省值必须是常量或者全局变量, 一般都是常量

缺省参数的应用

我们在设计顺序表的时候,第一次需要初始化

而尾插的时候,如果此时需要扩容,那么存在两种情况:

  1. 顺序表的capacity(容量)为0 那么我们就把他设置为4

  2. 否则就capacity 变成二倍

利用缺省参数可以更加巧妙的设计这里

我们在初始化函数中 就设置一个缺省参数,如果用户有需要(知道要插入多少个数据), 可以把capacity设置为100或者更大的数传入进行初始化,这样就减少了一些不必要的扩容(毕竟扩容是有代价的) ,如果没什么需要,因为设置了缺省值,传入的capacity就是默认值4

//test.h
typedef struct SeqList {
	int* a;
	int capacity;
	int size;
}SeqList;
//声明的时候,设置capacity默认为4
void SeqListInit(SeqList* slist, int capacity=4);

//test.c
/*顺序表的初始化*/
void SeqListInit(SeqList* slist, int capacity)
{
	int*tmp = (int*)malloc(sizeof(int) * capacity);
	if (tmp == NULL)
	{
		printf("malloc fail!\n");
		exit(-1);
	}
	slist->a = tmp;
	slist->capacity = capacity;
}
int main()
{
    struct SeqList slist;
    //如果知道 一定会插入100个数据,就可以传参数100
    // 这样提前开辟好空间,减少插入数据时的扩容操作
    SeqListInit(&slist,100);
    return 0;
}

标签:capacity,int,void,缺省,C++,参数,默认值
From: https://www.cnblogs.com/iiianKor/p/17984326

相关文章

  • 图论---可视区域获取(C++)
    1.开源库获取   地址:http://en.wikipedia.org/wiki/Visibility_graph2.使用使用处包含头文件 #include"visilibity.hpp"即可,以下面在Qt中使用为例:1/*2=========AVisiLibityExampleProgram=========3Thisprogramprovidesatextinterfacewhic......
  • 44从零开始用Rust编写nginx,命令行参数的设计与解析及说明
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/......
  • c++学习由浅入深刷题指南
    新手村任何一个伟大的目标,都有一个微不足道的开始。洛谷的第一个任务勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。P1000P1001P1421P1425顺序与分支计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。P1422P1085P1089P1909循环!......
  • C++ 项目结构
    1.C++项目结构C++项目包含几千个文件,当构建项目时,需要选择编译哪些文件,选择哪种工具编译这些文件组织称可执行文件1.1编译计算机处理器只能执行底层二进制指令,编译器需要将C++源码转换成处理器能执行的指令集。编译器配置的内存称为栈帧(Stackframe),配置内存传递数......
  • 2024-1-23URL查询参数
    目录URL查询参数小结URL查询参数在axios中查询参数需要用到params选项注意:axios在运行时把参数名和值,会拼接到url?参数名=值格式axios({ url:'目标资源地址', paramas:{ 参数名:值 }}).then(result=>{ //对服务器返回的数据做后续处理})然后这里提供一个例子(用于......
  • 参数的校验
    参数校验框架:springvalidation(使用预定义的注解完成参数校验)引入SpringValidation起步依赖<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-validation</artifactId></dependency>在参数前面加Patte......
  • Go-命令行参数解析
    1.解析命令行参数程序在执行时,获取在命令行启动程序是使用的参数命令行(Commandlineinterface--CLI):基于文本来查看、处理、操作计算机的界面,又被称为终端、控制台命令:在命令行执行的程序,一般是一行,包含命令名字、子命令与命令相关的选项(Flag),Flag:传递给命令的参数......
  • 【干货】VS Code中配置C/C++运行环境
    1、安装MinGW-w64有个很重要的工具:MinGW-w64,里面包含了在windows上编译调试C++代码所需要的所有环境(以及一些其他的小工具包,例如linux风格的命令ls,将这个包解压缩后的路径添加到系统环境变量PATH中就可以用了)。他的具体的发布和下载位置:Releases·skeeto/w64devkit(github.co......
  • C++U5-第04课-广度优先搜索1
    学习目标广度优先搜索简称广搜搜,英文缩写(BFS)顾名思义就是按照广度顺序优先进行枚举,其本质也是一种暴力枚举的思想。 广度优先搜索(Breadth-FirstSearch,简称BFS)是一种图搜索算法,用于遍历或搜索图数据结构的所有节点。该算法从起始节点开始,逐层地向外扩展,先访问当前节点的所有......
  • C++U5-第03课-深度优先搜索3-连通块类型
    学习目标 本节课主要学习一种类型的深度优先搜索-连通块  [数水坑]  【思路分析】相连的水坑可以被认为是一个水坑,求水坑的个数,就是求连通块的个数。可以采用搜索来访问每个点。每访问到一个W表示至少有一个水坑,通过搜索8个方向,得到这个点连通的所有的......