C++默认参数(函数参数的默认值)

C++ 中,声明一个函数时,可以为函数的参数指定默认值。当调用有默认参数值的函数时,可以不写出参数,这时就相当于以默认值作为参数调用该函数。

例如:
void Function1(int x=20);  //函数的声明中,指明参数 x 的默认值是 20
//...
Function1();  //正确的调用语句,等效于 Function1(20);

不仅可以用常数,还可以用任何有定义的表达式作为参数的默认值。例如:
int Max(int m, int n);
int a, b;
void Function2(int x, int y=Max(a,b), int z=a*b){
    //...
}

Function2(4);  //正确,等效于 Function2(4, Max(a,b), a*b);
Function2(4, 9);  //正确,等效于 Function2(4,9 , a*b);
Function2(4, 2, 3);  //正确
Function2(4, ,3);  //错误!这样的写法不允许,省略的参数一定是最右边连续的几个

函数参数的默认值可以像上面的 Function1 那样写在声明函数的地方,也可以像 Function2 那样写在定义函数的地方,但是不能在两个地方都写。

函数默认参数所带来的好处是使程序的可扩充性更好,即当程序需要增加新功能时,改动可以尽可能少。

试想下面这种情况。一个即将编写完成的绘图程序,其中有一个画圆的函数 Circle,画出来的圆都是黑色的,这时希望增加画彩色圆的功能,于是就需要在 Circle 函数中增加一个 int 型的 color 参数,用来表示颜色。

但是原来的程序中可能大多数调用 Circle 函数的地方依然只是画个黑色的圆就可以了,只有少数几个地方需要改成画彩色的圆。此时,如果要找出所有调用 Circle 函数的语句并补上颜色参数,会十分烦琐。

而有了函数参数默认值的机制,则只需为 Circle 函数的新参数指定默认值 0(假定 0 代表黑色),然后找出少数几个调用 Circle 函数画彩色圆的地方,补上颜色参数即可。

实践中这种情况 是经常发生的。