函数参数的默认值

  • C++中可以在函数声明时为参数提供一个默认值
  • 当函数调用时没有提供参数的值,则使用默认值
int mul(int x = 0);//提供一个参数默认值

int main()
{
    printf("%d\n", mul());  //mul(0)

    return 0;
}

int mul(int x)
{
    return x*x;
}

参数默认值必须在函数声明中指定,那么问题来了 问题:

    函数定义是否可以出现函数参数的默认值?
    当函数声明和定义中的参数默认值不同会发生什么?
int mul(int x = 0);
//...
int mul(int x = 5)
{
    return x*x;
}      

函数参数默认值只能在声明时设置

函数默认参数的规则

  • 参数默认值必须从右向左提供
  • 函数调用时使用了默认值,则后续参数必须使用默认值
int add(int x, int y = 1, int z = 2)
{
    return x + y+ z;
}

add(0);         //x = 0
add(2, 3);      //x = 2, y = 3
add(3, 2, 1);   //x = 3, y = 2, z = 1

C++是强类型语言

函数的占位参数

  • 占位参数只有参数类型声明,而没有参数名声明
  • 一般情况下,在函数体内部无法使用占位参数
int func(int x, int)
{
    return x;
}

//  ...

func(1, 2);

函数占位参数的意义

  • 占位参数与默认参数结合起来使用
  • 兼容C语言程序中可能出现的不规范写法

举个例子:

#include <stdio.h>

void func()
{

}

int main()
{
    func();
    func(1, 2);

    return 0;
}
//这部分代码在C语言里是可以编译通过的

但是移植到C++环境里面,是编译不通过的,但是C++为了兼容C语言

#include <stdio.h>

void func(int = 0, int = 0)
{

}

int main()
{
    func();
    func(1, 2);

    return 0;
}

小结

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