学科分类
目录
C++基础

默认参数

对于默认值大家都不陌生,比如在安装某一款软件时,在安装过程中会有好多选项设置了默认参数值,你可以不管它继续安装,当然你也可以更改这些默认值。类似于此,C++的函数也支持默认参数机制,即在定义或声明函数时给形参一个初始值,在调用函数时,如果不传递实参就使用默认参数值。例如下面两个设置图片大小的的函数声明,一个带默认参数值,一个不带。

int _size1(int length = 20, int width = 30);
int _size2(int length, int width);

调用size1()函数时,如果不传递参数,则图片默认大小为2030;如果调用size2()函数,则必须要传递参数来设置图片大小。接下来我们通过一个具体的案例来学习默认参数的用法,如例1所示。

例1

 1    #include <iostream>
 2    using namespace std;
 3    void add(int x, int y = 1, int z = 2); //函数声明中有两个形参有默认值
 4    int main()
 5    {
 6        add(1);  //只传递1给形参x,y、z使用默认形参值
 7        add(1, 2); //传递1给x,2给y,z使用默认形参值
 8        add(1, 2, 3); //传递三个参数,不使用默认形参值
 9        system("pause");
 10        return 0;
 11    }
 12    void add(int x, int y, int z) 
 13    {
 14        cout<< x + y + z << endl;
 15    }

运行结果如图1所示。

图1 例1-11运行结果

在例1中定义了函数add(),三个形参有两个有默认参数值,在main()中调用该函数分别传入一个参数、两个参数、三个参数,都有结果打印出来,说明在传入参数不足的情况下函数使用了默认参数。

在使用默认参数时有一些规则需要注意。

(1)默认参数只可在函数声明中出现一次,如果没有函数声明 ,只有函数定义,才可以在函数定义中设定。如例1中,add()函数既有定义又有声明,则默认参数只能在函数声明中设定而不能在函数定义中设定。

(2)默认参数定义的顺序是自右向左,即如果一个参数设定了默认参数,则其右边不能再有普通参数。例如下面的代码:

void add1(int x, int y = 1, int z = 2);    //正确
void add2(int x, int y = 1, int z);        //错误,默认参数后不能再有普通的形参

(3)默认参数调用时,遵循参数调用顺序,即有参数传入它会先从左向右依次匹配。

(4)默认参数值可以是全局变量、全局常量,甚至可以是一个函数,但不可以是局部变量,因为默认参数的值是在编译时确定的,而局部变量位置与默认值在编译时无法确定。

点击此处
隐藏目录