C++超详细讲解函数参数的默认值

 更新时间:2022年05月31日 09:23:13   作者:tianyvHon  
在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数

1.参数默认值的指定方式

在 C++ 中,可以在函数声明时为参数提供一个默认值。这样在函数调用时,如果没有提供函数参数值,则使用默认值。

e.g. 在函数声明时,指定参数默认值

void Demo(int x = 0);
int main(int argc, char* argv[])
{
    Demo();						// 不用提供参数,会将 x = 0 的结果输出
    return 0;
}
void Demo(int x)
{
    printf("x = %d\r\n", x);
}

e.g. 没有函数声明,直接在函数定义时指定参数默认值

void Demo(int x = 5)
{
    printf("x = %d\r\n", x);
}
int main(int argc, char* argv[])
{
    Demo();
    return 0;
}

注意:参数的默认值必须在函数声明中指定

error e.g. 在函数的声明和定义中均指定默认值

void Demo(int x = 0);
int main(int argc, char* argv[])
{
    Demo();
    return 0;
}
void Demo(int x = 10)
{
    printf("x = %d\r\n", x);
}

error e.g. 仅仅在函数的定义中指定默认值

void Demo(int x);
int main(int argc, char* argv[])
{
    Demo();
    return 0;
}
void Demo(int x = 10)
{
    printf("x = %d\r\n", x);
}

2.参数默认值的指定规则

参数的默认值必须 从右向左 提供,即 未指定默认值的参数不能出现在指定默认值参数的右边,正确错误示例如下所示:

// ok
void Demo(int x, int y = 1; int z = 2);
// error
void Demo(int x = 0, int y, int z = 2);

为什么指定这个规则呢?

在 C++ 中调用函数时,对于没有指定默认值的参数,是可以不用对其传入参数的,而且不会报错。

有一个如下代码所示的函数:

void Demo(int x, int y = 1, int z = 2)
{
    printf("x = %d\r\n", x);
    printf("y = %d\r\n", y);
    printf("z = %d\r\n", z);
}

当调用这个函数时,可以执行下面的代码进行调用:

int main(int argc, char* argv[])
{
    Demo(0);
    return 0;
}

上面所述的调用方式是没有错的,此时将 0 赋值给 x,参数 y、z 分别使用默认值。但是,如果函数是如下代码所示的:

void Demo(int x = 0, int y, int z = 2)
{
    printf("x = %d\r\n", x);
    printf("y = %d\r\n", y);
    printf("z = %d\r\n", z);
}

当我们用上述同样的方式进行调用时:

int main(int argc, char* argv[])
{
    Demo(0);
    return 0;
}

此时,代码是编译不过的,因为编译器默认把 0 赋值给 x,导致没有给参数 y 传入值而报错。到这里,应该就晓得制定这个规则的好处了,这样在调用函数的时候,只需要从左向右传入参数。如果未指定的默认值的参数出现在指定默认值参数的右边,那么就必须对指定默认值的参数传入参数。如下代码所示的调用方式均正确:

int main(int argc, char* argv[])
{
    Demo(0);
    Demo(0, 3);
    Demo(0, 3, 4);
    return 0;
}

到此这篇关于C++超详细讲解函数参数的默认值的文章就介绍到这了,更多相关C++函数参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C/C++中时间库函数的使用详解

    C/C++中时间库函数的使用详解

    这篇文章主要为大家详细介绍了C/C++中的时间相关知识总结,例如时间库函数的使用以及获取本地时间的不同方法,文中的示例代码讲解详细,需要的可以参考一下
    2022-11-11
  • C语言的随机数rand()函数详解

    C语言的随机数rand()函数详解

    这篇文章主要为大家详细介绍了C语言的随机数rand()函数,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    这篇文章主要介绍了C++排序算法之插入排序解析,将数组分为有序表和无序表,每次从有序表中取出一个元素,插入到有序表的适当位置,每遍历一次,有序表中元素增加一个,无序表中元素个数减少一个,重复n-1次,完成排序,需要的朋友可以参考下
    2023-10-10
  • VisualStudio2022提交git代码的方法实现

    VisualStudio2022提交git代码的方法实现

    本文主要介绍了VisualStudio2022提交git代码的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C语言实现按月显示的日历

    C语言实现按月显示的日历

    这篇文章主要为大家详细介绍了C语言实现按月显示的日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C++精要分析lambda表达式的使用

    C++精要分析lambda表达式的使用

    Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。 lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法
    2022-05-05
  • C语言实现职工工资管理系统的示例代码

    C语言实现职工工资管理系统的示例代码

    这篇文章主要为大家详细介绍了C语言如何实现职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言示例讲解if else语句的用法

    C语言示例讲解if else语句的用法

    这篇文章主要介绍C语言中的If Else语句怎么使用,在日常操作中,相信很多人在If Else语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出使用方法,接下来,请跟着小编一起来学习吧
    2022-06-06
  • C++按位异或运算符的使用介绍

    C++按位异或运算符的使用介绍

    本篇文章对C++按位异或运算符的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • Linux页面置换算法的C语言实现

    Linux页面置换算法的C语言实现

    这篇文章主要为大家详细介绍了Linux页面置换算法的C语言实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论