栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础—缺省参数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础—缺省参数

梦想是世界上最快乐的事儿 — — 苏格拉底

缺省参数
    • 1、缺省参数
    • 2、缺省参数的分类
      • 2.1 全缺省参数
      • 2.2 半缺省参数
  • 总结


1、缺省参数

一般情况下,函数调用时的实参个数应该和形参个数相同,但为了方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不同
缺省参数是指在定义函数时为形参指定缺省值(默认值)

这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。

  • 如果给出参数值,将实参传递给形参进行调用
  • 如果不给出实参,则按缺省值进行调用

缺省参数的函数调用:缺省参数并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出。如果缺省实参是任意表达式,则函数每次被调用时该表达式被重新求值。但是表达式必须有意义

举个简单的栗子:

#include 
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 
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=800
	func(10, 20);  // ok 打印:a=10 b=20 c=800
	func(10, 20, 30);  // ok 打印:a=10 b=20 c=30
	func(10, , 30);  // error 注意,它没有办法实现b不传,只传a和b,也就是说编译器只能按照顺序自左向右传递
	return 0;
}

输出结果如下图所示:

2、缺省参数的分类 2.1 全缺省参数

顾名思义,全缺省参数就是所有的参数都带有缺省值

int Add(itn a = 10, int b = 20, int c = 30)  {}

全缺省参数通常这样进行参数传递:

#include 
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 
using namespace std;
int Sum(int a, int b = 20, int c = 30)
{
	return a + b + c;
}
int main()
{
	Sum();  // 编译出错,因为a没有缺省值,在函数调用时必须进行传参
	Sum(10);  // ok 60
	Sum(10, 20);  // ok
	Sum(10, 20, 30);  // ok
	return 0;
}

其输出结果如下:


总结
  1. 所有带缺省的参数必须放在参数列表的右侧,即先定义所有的非缺省参数,再定义缺省参数
  2. 缺省参数在公共头文件包含的函数声明中指定,不要在函数的定义中指出(如果在函数的定义中指定缺省参数值,在公共头文件包含的函数声明中不能再次指定缺省参数值)
  3. 缺省实参不一定必须是常量表达式,可以使用任意表达式
  4. 当缺省实参是一个表达式时,在函数被调用时该表达式被求值
  5. C语言不支持

不妨点在个赞再走呗!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号