文章目录

  • 前言
    • 1.1 缺省参数概念
    • 1.2 缺省参数分类
      • 1.2.1 全缺省参数
      • 1.2.2 半缺省参数
    • 1.3 缺省参数使用注意事项
      • 1.3.1 缺省参数必须从右往左依次来给出,不能间隔着设置缺省参数
      • 1.3.2 缺省参数不能在函数声明和定义中同时出现
      • 1.3.3 缺省值必须是常量或者全局变量
  • 总结

前言

编译工具:visual studio 2019

语言:C++


1.1 缺省参数概念

  缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
  例程1:

#include<iostream>
using namespace std;void TestFunc1(int a = 0) {//参数默认值为0cout << a << endl;
}
int main()
{TestFunc1(); // 没有传参时,使用参数的默认值TestFunc1(10); // 传参时,使用指定的实参
}

运行结果:

图1 例程1运行结果

  例程1中,函数TestestFunc1的参数a属于缺省参数,缺省值为0。如果在调用TestestFunc1函数时,没有传参,则使用默认参数0,如果有传参,则使用指定的实参。


1.2 缺省参数分类

1.2.1 全缺省参数

  全缺省参数顾名思义就是函数的参数全部都属于缺省参数,显然例程1中的TestFunc1函数的参数就属于中的全缺省参数。
  例程2:

#include<iostream>
using namespace std;
void TestFunc2(int a = 10, int b = 20, int c = 30) {cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
int main()
{cout << "不传入参数" << endl;TestFunc2();cout << "传入一个参数" << endl;TestFunc2(1);cout << "传入两个参数" << endl;TestFunc2(1, 2);cout << "传入三个参数" << endl;TestFunc2(1, 2, 3);return 0;
}

运行结果:

图2 例程2运行结果

  调用全缺省函数时,可以不用传任何参数,如果传入参数则默认从最左侧开始赋值。比如例程2中,当传入1个参数时,默认把参数传递给a;传入2个参数时(1, 2),则赋值顺序为:1传递给a、2传递给b;传递三个参数也是从最左侧开始赋值,即a = 1、b = 2、c = 3。

1.2.2 半缺省参数

  半缺省参数即函数的参数至少有一个参数没有缺省值。
  例程3:

#include<iostream>
using namespace std;void TestFunc3(int a, int b, int c = 30) {cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
int main()
{cout << "传入两个参数" << endl;TestFunc3(1, 2);cout << "传入三个参数" << endl;TestFunc3(1, 2, 3);return 0;
}

运行结果:

图3 例程3运行结果

  例程3中,函数TestFunc3的两个参数不具备缺省值,所以调用时,至少要传入两个参数,否则会出错。


1.3 缺省参数使用注意事项

1.3.1 缺省参数必须从右往左依次来给出,不能间隔着设置缺省参数

  比如对于TestFunc3函数,如果是以下两种定义方式则会出错:
错误1:没有把缺省参数放在最右侧

void TestFunc3(int a = 10, int b, int c)

错误2:试图间隔着设置缺省参数

void TestFunc3(int a = 10, int b, int c = 30)

  提示:如果你想把某个参数设置为缺省参数,只需把该参数放在最右侧就可以了。

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

例如:

  可以看到在定义函数TestFunc4时,由于声明和定义中都出现了缺省参数,在visual studio 2019编译器中无法编译通过。编译器之所以这么做是为了防止出现歧义,比如,当声明与定义位置同时出现缺省参数,而且恰巧两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值。必须把声明或定义中参数的默认值去掉一个,针对以上错误,程序可以更改如下。

修改1:去掉声明中参数的默认值

1.//函数声明
2.void TestFunc4(int a);
3.//函数定义
4.void TestFunc4(int a = 0) {5.    cout << "a = " << a << endl;
6.}

修改2:去掉定义中参数的默认值

1.//函数声明
2.void TestFunc4(int a = 0);
3.//函数定义
4.void TestFunc4(int a) {5.    cout << "a = " << a << endl;
6.}

  例程4:

#include<iostream>
using namespace std;//函数声明
void TestFunc4(int a);
//函数定义
void TestFunc4(int a = 0) {cout << "a = " << a << endl;
}
int main()
{TestFunc4();return 0;
}

运行结果:

图4 例程4的运行结果

  从例程4中可以看到,当去掉声明中参数的默认值时,程序可以正常运行。

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

  以上的程序中参数的缺省值都是常量,下面举一个缺省值为全局变量的例子。
  例程5:

#include<iostream>
//#define MAX 100
using namespace std;
int Max = 100;
void TestFunc5(int score = Max) {cout << "score = " << score << endl;
}
int main()
{cout << "全局变量作为缺省值: ";TestFunc5();cout << "改变全局变量的值: ";Max = 150;TestFunc5();return 0;
}

运行结果:

图5 例程5的运行结果

  例程5中,定义了一个全局变量Max,并将其作为参数score的缺省值。当我们改变全局变量Max的值时,函数参数的缺省值也跟着改变。


总结

  本文讲述了缺省参数的相关知识点,首先介绍了缺省参数的概念,并举例说明了缺省参数的分类,最后给出了缺省参数的三个注意点。缺省参数概念是函数重载的基础,了解了缺省参数的概念就可以去学习函数重载了。

C++之函数的缺省参数相关推荐

  1. [python] 函数的缺省参数和注意事项

    所谓缺省参数,在定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数.调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值. 一.列表的排序方法明确缺省 ...

  2. C++ 语言学习 day01 (linux ),基本输入输出错误输出函数,名字空间的含义,内联函数,缺省参数,引用 ,、new操作符

    1.介绍c++ C++头文件风格 c++ 老风格:以.h结尾 是c语言风格  stdio.h  (尽量不) c++的转换风格: 去掉.h 在文件名前加c 例如#include <cstdio&g ...

  3. 第一周 从C走进C++ 008 函数缺省参数

    1. 函数的缺省参数  C++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值. void func( int x1, int x2 = ...

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

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

  5. C++中函数重载、缺省参数及命名空间

    C++ 1 函数重载 缺省参数 概念 分类 全缺省参数 半缺省参数 面试题 命名空间 目的 定义命名空间 命名空间的使用 函数重载 当两个函数拥有相同的名字时,在c语言中发现无法生成 但是在c++中却 ...

  6. 【C++入门第一期】命名空间 缺省参数 函数重载 的使用方法及注意事项

    目录 简介 命名空间 为何会有命名空间 命名空间的定义 嵌套定义 命名空间的使用 作用域限定符 using 将命名空间中某个成员引入 using namespace 将该空间所有成员引入 缺省参数 全 ...

  7. 小百对python的缺省参数的理解

    代码---------- """ 定义函数时,可以给某个参数指定一个默认值,具有默认值的参数叫做缺省参数 调用函数时,如果没有给缺省参数赋值,则缺省参数输出定义的默认值 ...

  8. python函数返回值和参数_python_函数参数和返回值

    01.函数参数和返回值的作用 函数:封装功能独立的代码,在需要时通过函数名调用,可以直接访问全局变量 参数:外界希望在函数内部处理数据 返回值:向外界报告函数的执行结果 定义函数时, 是否接受参数,或 ...

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

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

最新文章

  1. Ratatosk - Hybrid error correction of long reads enables accurate variant calling and assembly
  2. WINDOWS中, 如何查看一个运行中的程序是64位还是32位的
  3. 说说报表工具的无编码定制能力
  4. c# 命名空间命名规范_C#中的命名空间
  5. open×××结合pam_mysql认证出错的解决方法
  6. SQL Server 2012入门T-SQL基础篇:(10)UPDATE语句
  7. python开发板卡驱动开发_一款能让你发挥无限创意的MicroPython开发板—TPYBoard开发板测...
  8. Arcgis拓扑检查必须相互覆盖操作步骤
  9. Nessus下载及安装
  10. 点到线的距离计算公式
  11. 2012-7-05可樂词汇积累#9312;
  12. 用户输入错误验证码错误三次后,锁定该用户3分钟 redis 使用案列
  13. 不变初心数 (15 分) C语言
  14. 使用application记录页面访问次数
  15. 阿里M8级铁子整理出SQL手册:收获不止SQL优化,抓住SQL的本质
  16. MySQL Workbench生成数据表关系图
  17. iOS身份证的正则验证
  18. python实现整数从低位到高位输出与从高位到低位输出
  19. 百度:AI技术哪家强,度厂科大最在行?
  20. 【system】cmd命令大全

热门文章

  1. 利用weka进行数据挖掘——基于Apriori算法的关联规则挖掘实例
  2. 【论文笔记】A comprehensive survey on sentiment analysis: Approaches, challenges and trends(中)
  3. 毕设进程-小程序云开发随笔
  4. 抖音小程序如何运营;怎么快速变现赚钱。
  5. 基于SpringBoot的教务系统【附源码】
  6. C#模糊查询Access
  7. 支付宝app支付java后台流程demo
  8. 门窗传感器能与哪些设备联动
  9. unity工具类篇 unity 计时器
  10. 低损耗设计ABB低压电容器QCap