函数可以有默认的参数

作者:jicanmeng

时间:2014年11月27日


在C++中,允许在函数声明或定义时给一个或多个参数指定默认值。而在C语言中是不允许的。

示例程序如下:

#include <iostream>

void PrintValues(int nValue1, int nValue2=10)
{
    using namespace std;
    cout << "1st value: " << nValue1 << endl;
    cout << "2nd value: " << nValue2 << endl;
}

int main()
{
    PrintValues(1); // nValue2 will use default parameter of 10
    PrintValues(3, 4); // override default value for nValue2
}

程序运行结果如下:

[jicanmeng@andy tmp]$ g++ defaultParam.cpp
				[jicanmeng@andy tmp]$ ./a.out
				1st value: 1
				2nd value: 10
				1st value: 3
				2nd value: 4
				[jicanmeng@andy tmp]$

函数PrintValues()有两个参数,其中第二个参数有默认值10。当我们调用这个函数时,如果没有提供第二个参数,那么PrintValues()调用时第二个参数就使用默认值10。

在设置函数的默认形参值时要注意几点:

  1. 当函数既有原型声明又有定义时,默认参数只能在原型声明中指定,而不能在函数定义中指定。
  2. 当一个函数需要有多个默认参数时,则在形参列表中,默认参数应严格从右到左逐个定义和指定,中间不能跳开。例如void PrintValue(int nValue1=10, int nValue2);这样的函数声明是不允许的。
  3. 当调用有默认参数的函数时,系统按从左到右的顺序将实参和形参结合。当实参的数目不足时,系统将按同样的顺序用声明或定义中的默认值来补齐所缺少的参数。
  4. 由于对同一个函数的原型可以进行多次声明,因此在函数声明中指定多个默认参数时,可用多条函数声明语句来指定,但同一个参数的默认值只能指定一次。例如:void PrintValue(int nValue1=10, int nValue2=5);函数声明语句就等价于两条函数声明语句:void PrintValue(int nValue1=10, int nValue2); void PrintValue(int nValue1, int nValue2=5);

参考资料

  1. <<C++实用教程>> 电子工业出版社 郑阿奇 主编 丁有和 编著 P95
  2. The C++ Tutorial:
    http://www.learncpp.com/cpp-tutorial/77-default-parameters/