通常情况下,函数在调用时,形参从实参那里取得值。对于多次调用同一函数的同一 实参时,C++给出了更简单的处理办法。给形参以默认值,这样就不用从实参那里取值了。 

 #define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;


// c++中 允许给一个形参 默认设置为一个值, 当外部调用函数的时候,如果不传递参数的,那么x就是100
//如果外部传递实参,那么x的值就是实参的值

int func1(int x, int = 0) // 这里的 int = 0 是一个占位符,没有实际意义
{
cout << "func1: x = " << x << endl;

return 0;
}


//求一个 立方体的体积
//默认参数,必须是从右向左设置, 只有有一个参数是带有默认参数 的,那么他右边的所有参数都必须有默认值。
int volume(int len, int width, int high = 30)
{
return len * width * high;
}

int main(void)
{
int x = 10;
int v = 0;

func1(x); // 传递一个参数
func1(x , v); // 传递两个参数,v 传到 func1函数中没有意义, int = 0 是一个占位符


int len = 10;
int w = 20;
int h = 30;

v = volume(len, w, h); // 传递三个参数

cout << "v = " << v << endl;

v = volume(len, w); // 传递两个参数

cout << "v = " << v << endl;

return 0;
}

错误函数写法

float volume(float length, float weight = 4,float high){  // 错误的函数写法

return length*weight*high;
}

在默认参数规则,如果默认参数出现,那么右边的都必须有默认参数,例如当 float weight 给予默认值,float high 没有赋值的话,运行就会报错


int func1(int x, int = 0)
{
cout << "func1: x = " << x << endl;

return 0;
}

函数占位参数
占位参数只有参数类型声明,⽽而没有参数名声明
一般情况下,在函数体内部⽆无法使⽤用占位参数

注:可以将占位参数与默认参数结合起来使⽤

意义

为以后程序的扩展留下线索
兼容C语⾔言程序中可能出现的不规范写法

总结:

默认参数规则 :
只有参数列表后面部分的参数才可以提供默认参数值
一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参 数都必须使用默认参数值 

如果默认参数和占位参数在一起,都能调⽤用起来