C++小白到大白养成记 -养成记7:函数参数的扩展

--事物的难度远远低于对事物的恐惧!

    在C++中,使用函数的默认参数可以使我们的编程工作在某些方面变得很方便,主要体现在我们调用函数时,如果没有指明函数参数,那么就是使用函数的默认参数,如果提供了函数参数,那么就使用我们提供的函数参数。

需要注意的是:参数的默认值需要在声明函数时就指明,比如我们声明一个函数int fun(int i = 0); 这个样就使的fun函数的参数i的默认值为0,假如我们在函数的声明和定义的地方分别将参数i的默认值设为不同,会怎么样?下边以代码来验证一下:

#include <iostream>

using namespace std;

int fun(int i = 0); //函数声明,指明i默认值为0

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

int fun(int i = 12) //函数定义,指明i默认值为
{
    cout << i << endl;
}
以上代码,我们在声明和定义时分别讲参数i的默认值设为0和12,下边我们来编译一下:

可以看到,在函数体定义的地方,设置参数默认值,编译器会报错,所以我们要记得:函数参数的默认值必须在函数声明中指定!

言归正传,我们来看看使用带默认值参数的函数,还是一样的代码,只是把函数定义时设的默认值去掉:

#include <iostream>

using namespace std;

int fun(int i = 0); //函数声明,指明i默认值为0

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

int fun(int i)
{
    cout << i << endl;
}
编译输出一下:

上边只是简单的说下函数参数的默认值,下边我们来看下函数默认参数的规则:
    -函数声明时,参数的默认值必须从右向左提供
    -函数调用时,如果有一个参数使用了默认值,则这个参数往后的参数必须使用默认值
    -函数调用时,参数是从左向右进行匹配的

下边以一个例子来说明:

#include <iostream>

using namespace std;

int fun(int x, int y = 2, int z = 3); //函数声明,指明i默认值为0

int main(int argc, char const *argv[])
{
    fun(1);     //x=1, y=2, z=3
    fun(1, 4);  //x=1, y=4, z=3
    fun(5,6,7); //x=5, y=6, z=7

    return 0;
}

int fun(int x, int y, int z)
{
    cout << x << "+" << y << "+" << z << " = " << (x+y+z) << endl;
}
编译输出一下:

以上输出跟我们分析的一样,假如我们fun函数声明改为int fun(int x, int y=2, int z),结果会是什么?请自行实验一下。

说完了函数的参数默认值,现在来谈谈C++中的函数占位参数
    -函数的占位参数只有参数类型声明没有参数名声明

    -一般情况下,在函数体内部无法使用占位参数

#include <iostream>

using namespace std;

int fun(int x, int) //第二个int仅仅是占位参数
{
    return x;
}

int main(int argc, char const *argv[])
{
    fun(1, 4);  //编译OK,这个参数4实际是没用的

    return 0;
}
函数占位参数的意义
    -占位参数与默认参数结合起来使用,例如int fun(int =0, int =0),那么在调用时就可以直接为fun();

    -兼容C语言程序中可能出现的不规范写法


总结:
    -C++中支持函数参数的默认值
    -如果函数调用时没有提供参数值,则使用默认值
    -参数的默认值必须从右向左提供
    -函数调用时一旦使用的默认值,则后续参数必须使用默认值
    -C++中支持占位参数,用于兼容C语言中不规范写法

猜你喜欢

转载自blog.csdn.net/lms1008611/article/details/80557742
今日推荐