函数定义默认参数

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数定义默认参数相关的知识,希望对你有一定的参考价值。

函数定义默认参数

       在调用一个函数的时候,函数的实参传递给形成。因此实参的个数应与形参个数相同。但是,有时多次调用同一函数的时候,传递相同的实参。那么,能否省去实参的输入,自动给形参传递一个数值?

C++提供简单的处理办法,给形参设置一个默认值,这样形参就不必一定要从实参取值了,如下是一个函数声明:

float get_length(float r = 6.5)     //函数get_length的参数r 设置默认值6.5

       指定参数r 的默认值为6.5,如果在调用此函数的时候,参数 r 的值为6.5,则可以不必给出实参的值,如:

get_length();   //调用该函数,没有传递参数,就参数r 就是要默认值6.5

如果不想使用形参设置的默认值,则通过实参另行给出,如:

get_length(8.5);    //给参数r 传递了实参8.5,那么,就是传递值给参数r,而不是默认的6.5数值;

       这种方法比较灵活,可以简化编程,提高运行效率。

       如下是一个测试例子:

       程序运行结果如下:

       可以看到,定义了get_size()函数,并且设置了默认参数。那么,当调用get_size()函数,不设置参数的时候,就是使用默认参数。

       如果有多个形参,可以设置每一个形参有一个默认值,也可以只对一部分形参指定默认值。例如,有一个求“圆柱体体积”的函数,形参 h 代表圆柱体的高,r 为圆柱体的半径,函数的原型如下:

float volume(float h, float r = 12.6)   //只对形参r 指定默认值12.6

函数调用可以采用以下形式:

volume(6);          //相当于volume(6, 12.6)

volume(6, 8);       //相当于h 的值为6, r 的值为8

       实参与形参的结合是从左到右顺序进行的,第1个实参必然与第1个形参结合,第2个实参必然与第2个形参结合,因此,指定默认值的参数必须放在形参列表中的最右端,否则出错。例如:

void f1(float a, int b = 0, int c, char d = 'a')    //错误

void f2(float a, int c, int b = 0, char d = 'a')    //正确

如果要调用上面的 f2() 函数,可以采取下面的形式:

f2(3.5, 5, 3, 'x'//形参的值全部从实参得到

f2(3.5, 5, 3)       //最后一个形参的值取默认值'a'

f2(3.5, 5)          //最后两个形参的取值为默认值b = 0, d = 'a'

       可以看到,在调用有默认参数的函数时,实参的个数可以与形参不同,没有设置实参的函数,形参的值从函数的默认参数中获取。利用这一特性,可以使函数的使用更加灵活。

注意:一个函数不能即作为重载函数,又作为有默认参数的函数。因为,当调用函数时如果少写一个参数,系统无法判断是利用重载函数还是利用默认参数的函数,会出现二义性,系统无法执行。例如:

此时,我们定义max()函数,有两个不同的max()函数定义,所以,是重载函数。而且,第一个max()函数,我们设置了参数默认值。

那么,我们在main()函数中,没有对max()函数有任何调用,所以,编译运行如下:

可以看到,程序编译运行OK,正确执行程序。

那么,我们在main()函数中,调用max()函数,假设有如下的调用:

 

程序编译结果如下:

 

可以看到,编译提示错误!因为,编译器无法确定是调用哪一个函数,执行max(1, 2)函数,到底是调用哪一个函数?编译器无法确定,所以,编译错误。

所以,我们不可以重载函数的时候,有设置有默认参数,让函数调用有二义性的代码。

总结

本章节我们学习了C++的基础知识,学习如何编写、编译、运行一个C++程序。我们使用.cpp后缀的文件来存放C++的代码,然后,使用g++来编译程序。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

以上是关于函数定义默认参数的主要内容,如果未能解决你的问题,请参考以下文章

python函数

python回顾——函数高级

python-在定义函数时,不定长参数中,默认值参数不能放在必选参数前面

061-PHP函数定义默认参数

python定义函数时默认参数注意事项

python函数定义默认参数必须指向不可变对象