缺省参数

    • 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;
}

其输出结果如下:


总结

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

不妨点在个赞再走呗!

C++基础—缺省参数相关推荐

  1. C语言 函数缺省参数 - C语言零基础入门教程

    目录 一.函数简介 1.函数声明 2.函数定义 3.函数调用 4.函数形参和实参 二.函数缺省参数 1.函数全缺省参数 2.函数半缺省参数 三.注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 ...

  2. C++ C++基础语法入门总结(一)命名空间-输入输出-缺省参数-函数重载

    C++基础语法入门总结 C++ 命名空间 如何定义和使用命名空间 C++ 输入与输出 C++ 缺省参数 C++函数重载 名字修饰 extern "c" 推荐阅读 C++ 命名空间 ...

  3. C++基础入门(上):命名空间、输入输出、缺省参数

    引言 本系列旨在为初学者提供一份全面且易懂的C++入门指南.我们将从C++的关键字开始,逐步探索C++的各个方面,包括命名空间.输入输出.函数特性以及C++11的一些新增特性,如auto关键字.基于范 ...

  4. 【C++初阶】C++入门一(命名空间、输入输出、缺省参数、函数重载等)

    文章目录 (1)前言 (2)C++关键字(C++98) (3)命名空间 1)命名空间的定义 2)命名空间的使用 (3)C++的输入&输出 (4)缺省参数 1)缺省参数的概念 2)缺省参数的分类 ...

  5. C++中的糖果——缺省参数、内联函数、auto及nullptr关键字

    在C++中,相对于C语言,我们引入了许多新的概念,新的机制,它们的到来让我们的编程方便了不少,它并没有多么难理解,但是比较零碎,在我看来它就是一些加分项,故此,我们通常也将其称为C++中的糖果.下面就 ...

  6. 超详细的C++入门学习(命名空间,缺省参数,内联函数,函数重载等)

    目录 前言 1. C++关键字 2. 命名空间 2.1定义命名空间 2.2使用using将命名空间中某个成员引入 2.3使用using namespace 命名空间名称 引入 3. C++输入& ...

  7. C++入门:命名空间、缺省参数、函数重载、引用、内联函数、auto、范围for

    这里写目录标题 前言 命名空间 缺省参数 1.**什么是缺省参数** 2.缺省参数的分类 注意事项 函数重载 1.形参不同 2.形参顺序不同 3.形参个数不同 为什么会出现上述这样的情况呢?? gcc ...

  8. C++之函数的缺省参数

    文章目录 前言 1.1 缺省参数概念 1.2 缺省参数分类 1.2.1 全缺省参数 1.2.2 半缺省参数 1.3 缺省参数使用注意事项 1.3.1 缺省参数必须从右往左依次来给出,不能间隔着设置缺省 ...

  9. 【C++】函数缺省参数的作用

    用法:void func(int param1, int param2 = 1, int param = 3) {} func(10); //等同于func(10, 1 , 3) func(10,8) ...

最新文章

  1. STM32串口学习总结(经典)
  2. 小型项目服务器要多少,小型服务器需要什么配置
  3. 音视频领域或将开启”外卷“之路
  4. 思维 || Make It Equal
  5. linux查看图片的拍摄时间,ImageMagick 的一些高级图片查看技巧 | Linux 中国
  6. POJ-3714 Raid 平面最近点对
  7. GET /favicon.ico HTTP/1.1 404
  8. riso1855使用说明_理想CV1855驱动下载 理想CV1855打印机驱动 v20170627 32bit+64bit 免费安装版 下载-脚本之家...
  9. rpg服务器修改数据,ATOM RPG 修改数据方法 怎么修改游戏数据-游侠网
  10. 软件工程导论复习提纲
  11. SolidWorks有限元分析流程
  12. 腾讯云免费服务器 如何领取?
  13. 孤独者的自我救赎[自我的认知]
  14. 我的Effective C++读书笔记
  15. 如何判断你的初创企业是否有募资潜力
  16. 苹果服务器维护不能刷机,iphone刷机失败不开机报错维修方法分享
  17. [20130106]关于不同字符集下clob字段的存储问题.txt
  18. 数据库复习——单表使用where子句和分组(groud by)筛选查询(or、and、like、isnull)
  19. 陈年的凡客征途注定是星辰和大海
  20. 【计算机科学基础】玩转CSDN博客

热门文章

  1. 国外团队推出Xenxo S-Ring智能戒指,伸出手指头就能买单和通话
  2. C语言:求ax²+bx+c=0方程的解
  3. 请列举你所知道的Linux发行版与开源软件
  4. 手把手教你十五分钟搭建个人博客网站
  5. 物联网毕业设计 单片机室内环境温湿度检测设计与实现
  6. SpringCloud(Hoxton SR6)微服务工具集学习笔记
  7. CIL之——初识CIL
  8. vim 操作Esc+:wq无效怎么办?
  9. MongoDB教程(一):MongoDB云服务免费开通
  10. gazebo 直接获取传感器数据_基于uFUN开发板的心率计(一)DMA方式获取传感器数据...