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

Default Parameters in Functions - C++

本文关键字:参数 -C++ 默认 函数      更新时间:2023-10-16

如果我没有错的话,这种声明可以用于在构造函数中分配默认值:

/* .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...
}

为什么?

第一个例子根本不是"默认值"之一,它是对象的成员和基的初始化列表,只有在构造函数中才有意义。然而,构造函数可以具有默认的参数值,使用与任何其他函数相同的语法。

所以这很好,例如:

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
}

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