C语言Plus 2020-04-03

在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参传值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。


C++函数的默认参数详解_c++函数默认参数
C++函数的默认参数详解_c++_02

所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例:

#include<iostream>using namespace std;//@C语言Plus//带默认参数的函数void func(int n, float b = 1.2, char c = '@') {  cout << n << ", " << b << ", " << c << endl;}int main(){  //为所有参数传值  func(10, 3.5, '#');  //为n、b传值,相当于调用func(20, 9.8, '@')  func(20, 9.8);  //只为n传值,相当于调用func(30, 1.2, '@')  func(30);
 getchar();  return 0;}

当程序运行时输出:

10, 3.5, #20, 9.8, @30, 1.2, @

本例定义了一个带有默认参数的函数 func(),并在 main() 函数中进行了不同形式的调用。为参数指定默认值非常简单,直接在形参列表中赋值即可,与定义普通变量的形式类似。

指定了默认参数后,调用函数时就可以省略对应的实参了。

C++函数的默认参数详解_c++注意默认参数位置
C++函数的默认参数详解_c++_02

C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。

下面的写法是正确的:

void func(int a, int b = 10, int c = 20) {}void func(int a, int b, int c = 20) {}

但这样写不可以:

void func(int a, int b = 10, int c = 20, int d) {}void func(int a, int b = 10, int c, int d = 20) {}


默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。


C++函数的默认参数详解_c++需要注意的情况
C++函数的默认参数详解_c++_02

1. 默认参数只能放在函数声明处或者定义处,能放在声明处就放在声明处 。

默认参数在声明和定义处都有了,那么就会有编译错误。(两次默认赋值是不被允许的。)

a.大部分情况,别人调用你的代码只能看到函数声明,如果你写在定义处,别人根本不知道你的默认参数是什么。

b.如果你是在定义处写的默认参数,那么你在使用该函数前就需要把函数定义放在前面。不然编译阶段通过无默认参数的函数声明无法确定这个函数是带默认参数的。


所以,默认参数写在声明处啊。^ ^

C++函数的默认参数详解_c++_07

2.不要重载一个带默认参数的函数

C++函数的默认参数详解_c++_08

你调用func(666)的时候,谁知道你想调用哪一个。