函数中的默认参数 - C ++

时间:2012-03-04 13:55:05

标签: c++ default-value function-parameter

如果我没错,可以使用这种声明在构造函数中指定默认值:

/* .h */
class FooClass(){

   private:
     int* data;
     int depth, rows, columns;
     char* desc;

   public: 
     ... 
}

/* .cpp */
FooClass::FooClass()
    : data(NULL), depth(0), rows(0), columns(0), desc(NULL)
{
     //whatever constructor does...
}

但不允许将默认值分配给函数中的参数:

不行

/* .h */
class FooClass(){

   public:
      void foofunc(int var1, int var2, int var3, int var4);
}

/* .cpp */
FooClass::foofunc(int var1, int var2)
    : var3(0), var4(5)
{
     //whatever function does...
}

必须这样做:

确定

/* .h */
class FooClass(){

   public:
      void foofunc(int var1, int var2, int var3 = 0, int var4 = 5);
}

/* .cpp */
FooClass::foofunc(int var1, int var2, int var3, int var4)
{
     //whatever function does...
}

为什么?

2 个答案:

答案 0 :(得分:2)

第一个例子根本不是“默认值”之一 - 对象的成员和基础是initialisation list,这只在构造函数中有意义。但是,构造函数可以使用与任何其他函数相同的语法来使用默认参数值。

所以这很好,例如:

explicit FooClass(int* data = NULL, int depth = 0, int rows = 0, int columns = 0, char* desc = NULL)
    : data(data), depth(depth), rows(rows), columns(columns), desc(desc)
{
}

如果您需要的不仅仅是任何类型函数的简单默认值,请考虑重载函数,例如:

void my_function(int a, int b)
{
    // do stuff with a and b
}

void my_function()
{
    // version with no arguments, "default" behaviour
}

答案 1 :(得分:1)

构造函数正在初始化类成员或父类;该函数正在为其参数设置默认值。