C++基础—缺省参数
缺省参数
- 1、缺省参数
- 2、缺省参数的分类
- 2.1 全缺省参数
- 2.2 半缺省参数
- 总结
1、缺省参数
一般情况下,函数调用时的实参个数应该和形参个数相同,但为了方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不同
缺省参数是指在定义函数时为形参指定缺省值(默认值)
这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。
- 如果给出参数值,将实参传递给形参进行调用
- 如果不给出实参,则按缺省值进行调用
缺省参数的函数调用:缺省参数并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出。如果缺省实参是任意表达式,则函数每次被调用时该表达式被重新求值
。但是表达式必须有意义
举个简单的栗子:
#include <iostream>
using namespace std;
void delay(int loops = 5) // 参数缺省值
{// 延时函数,默认延时5个时间单位for(; loops > 0; loops--);
}
int main()
{delay(3); // 指定实参,使用实参cout << "延时3个时间单位!" << endl;delay(); // 没有指定实参,调用缺省值,等同于:delay(5)cout << "延时5个时间单位!" << endl;return 0;
}
缺省参数可以有多个,但所有的缺省参数必须放在参数表的右侧,即先定义所有的非缺省参数,再定义缺省参数。这是因为在函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才不会产生二义性。
举个简单的栗子:
#include <iostream>
using namespace std;
void func(int a, int b = 23, int c = 800)
{cout << "a = " << a << "b = " << b << "c = " << c << endl;
}
int main()
{func(12); // ok 打印:a=12 b=23 c=800func(10, 20); // ok 打印:a=10 b=20 c=800func(10, 20, 30); // ok 打印:a=10 b=20 c=30func(10, , 30); // error 注意,它没有办法实现b不传,只传a和b,也就是说编译器只能按照顺序自左向右传递return 0;
}
输出结果如下图所示:
2、缺省参数的分类
2.1 全缺省参数
顾名思义,全缺省参数就是所有的参数都带有缺省值
int Add(itn a = 10, int b = 20, int c = 30) {}
全缺省参数通常这样进行参数传递:
#include <iostream>
using namespace std;
int Add(int a = 10, int b = 20, int c = 30)
{return a + b + c;
}
int main()
{cout << Add() << endl; // ok 打印:60 没有实参,使用缺省值cout << Add(1) << endl; // ok 打印:51 将1传递赋值给a,b、c使用缺省参数cout << Add(1, 2) << endl; // ok 打印:33 将1传递赋值给a,2传递赋值给b,c使用缺省参数cout << Add(1, 2, 3) << endl; // ok 打印:6 a、b、c分别传递赋值1、2、3,不使用缺省参数cout << Add(1, , 3) << endl; // error 编译器不会跳着传参return 0;
}
其输出结果如下:
2.2 半缺省参数
顾名思义,函数只有部分参数有缺省值,且在函数定义时缺省值要从右向左依次给出
例如:
int func(int a, int b = 20, int c = 30) {} // 只有参数b、c具有缺省值
举个简单的栗子:
#include <iostream>
using namespace std;
int Sum(int a, int b = 20, int c = 30)
{return a + b + c;
}
int main()
{Sum(); // 编译出错,因为a没有缺省值,在函数调用时必须进行传参Sum(10); // ok 60Sum(10, 20); // okSum(10, 20, 30); // okreturn 0;
}
其输出结果如下:
总结
- 所有带缺省的参数必须放在参数列表的右侧,即先定义所有的非缺省参数,再定义缺省参数
- 缺省参数在公共头文件包含的函数声明中指定,不要在函数的定义中指出(如果在函数的定义中指定缺省参数值,在公共头文件包含的函数声明中不能再次指定缺省参数值)
- 缺省实参不一定必须是常量表达式,可以使用任意表达式
- 当缺省实参是一个表达式时,在函数被调用时该表达式被求值
- C语言不支持
不妨点在个赞再走呗!
C++基础—缺省参数相关推荐
- C语言 函数缺省参数 - C语言零基础入门教程
目录 一.函数简介 1.函数声明 2.函数定义 3.函数调用 4.函数形参和实参 二.函数缺省参数 1.函数全缺省参数 2.函数半缺省参数 三.注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 ...
- C++ C++基础语法入门总结(一)命名空间-输入输出-缺省参数-函数重载
C++基础语法入门总结 C++ 命名空间 如何定义和使用命名空间 C++ 输入与输出 C++ 缺省参数 C++函数重载 名字修饰 extern "c" 推荐阅读 C++ 命名空间 ...
- C++基础入门(上):命名空间、输入输出、缺省参数
引言 本系列旨在为初学者提供一份全面且易懂的C++入门指南.我们将从C++的关键字开始,逐步探索C++的各个方面,包括命名空间.输入输出.函数特性以及C++11的一些新增特性,如auto关键字.基于范 ...
- 【C++初阶】C++入门一(命名空间、输入输出、缺省参数、函数重载等)
文章目录 (1)前言 (2)C++关键字(C++98) (3)命名空间 1)命名空间的定义 2)命名空间的使用 (3)C++的输入&输出 (4)缺省参数 1)缺省参数的概念 2)缺省参数的分类 ...
- C++中的糖果——缺省参数、内联函数、auto及nullptr关键字
在C++中,相对于C语言,我们引入了许多新的概念,新的机制,它们的到来让我们的编程方便了不少,它并没有多么难理解,但是比较零碎,在我看来它就是一些加分项,故此,我们通常也将其称为C++中的糖果.下面就 ...
- 超详细的C++入门学习(命名空间,缺省参数,内联函数,函数重载等)
目录 前言 1. C++关键字 2. 命名空间 2.1定义命名空间 2.2使用using将命名空间中某个成员引入 2.3使用using namespace 命名空间名称 引入 3. C++输入& ...
- C++入门:命名空间、缺省参数、函数重载、引用、内联函数、auto、范围for
这里写目录标题 前言 命名空间 缺省参数 1.**什么是缺省参数** 2.缺省参数的分类 注意事项 函数重载 1.形参不同 2.形参顺序不同 3.形参个数不同 为什么会出现上述这样的情况呢?? gcc ...
- C++之函数的缺省参数
文章目录 前言 1.1 缺省参数概念 1.2 缺省参数分类 1.2.1 全缺省参数 1.2.2 半缺省参数 1.3 缺省参数使用注意事项 1.3.1 缺省参数必须从右往左依次来给出,不能间隔着设置缺省 ...
- 【C++】函数缺省参数的作用
用法:void func(int param1, int param2 = 1, int param = 3) {} func(10); //等同于func(10, 1 , 3) func(10,8) ...
最新文章
- STM32串口学习总结(经典)
- 小型项目服务器要多少,小型服务器需要什么配置
- 音视频领域或将开启”外卷“之路
- 思维 || Make It Equal
- linux查看图片的拍摄时间,ImageMagick 的一些高级图片查看技巧 | Linux 中国
- POJ-3714 Raid 平面最近点对
- GET /favicon.ico HTTP/1.1 404
- riso1855使用说明_理想CV1855驱动下载 理想CV1855打印机驱动 v20170627 32bit+64bit 免费安装版 下载-脚本之家...
- rpg服务器修改数据,ATOM RPG 修改数据方法 怎么修改游戏数据-游侠网
- 软件工程导论复习提纲
- SolidWorks有限元分析流程
- 腾讯云免费服务器 如何领取?
- 孤独者的自我救赎[自我的认知]
- 我的Effective C++读书笔记
- 如何判断你的初创企业是否有募资潜力
- 苹果服务器维护不能刷机,iphone刷机失败不开机报错维修方法分享
- [20130106]关于不同字符集下clob字段的存储问题.txt
- 数据库复习——单表使用where子句和分组(groud by)筛选查询(or、and、like、isnull)
- 陈年的凡客征途注定是星辰和大海
- 【计算机科学基础】玩转CSDN博客
热门文章
- 国外团队推出Xenxo S-Ring智能戒指,伸出手指头就能买单和通话
- C语言:求ax²+bx+c=0方程的解
- 请列举你所知道的Linux发行版与开源软件
- 手把手教你十五分钟搭建个人博客网站
- 物联网毕业设计 单片机室内环境温湿度检测设计与实现
- SpringCloud(Hoxton SR6)微服务工具集学习笔记
- CIL之——初识CIL
- vim 操作Esc+:wq无效怎么办?
- MongoDB教程(一):MongoDB云服务免费开通
- gazebo 直接获取传感器数据_基于uFUN开发板的心率计(一)DMA方式获取传感器数据...