将函数的默认参数设置为数组

时间:2011-08-30 07:17:37

标签: c++ arrays function

  

可能重复:
  Default values for array arguments

如何将数组作为函数的默认参数?我试过这个:

void drawCircle(float radius, GLfloat colour[3]={2.0, 3.0, 4.0}, bool do=true) {
...
}

部分GLfloat colour[3]={2.0, 3.0, 4.0}给了我一个错误。这在C ++中是否可行?

5 个答案:

答案 0 :(得分:7)

在C ++中,您不能通过值将完整的内存块作为参数传递给函数,但是您可以传递其地址。

所以不,你不能在C ++ 03中至少做到这一点。

你可以这样做:

GLfloat defaultColor[3] = {2.0, 3.0, 4.0}; 

void drawCircle(float radius, GLfloat colour[3]= defaultColor, bool do=true)
{
}

答案 1 :(得分:5)

您无法按值传递数组,因此您无法执行此操作。

所以解决方法是,将函数重载为:

void drawCircle(float radius, GLfloat *colour, bool pleaseDo) 
{
  //...
}
void drawCircle(float radius, GLfloat *colour)
{
  drawCircle(radius, colour, true);
}
void drawCircle(float radius) 
{
   GLfloat colour[3]={2.0, 3.0, 4.0};
   drawCircle(radius, colour, true);
}

drawCircle(a,b,c); //calls first function
drawCircle(a,b);   //calls second function
drawCircle(a);     //calls third function

第二个和第三个函数最终调用第一个函数!

另请注意,do是关键字,因此您无法将其用作变量名称。我将其替换为pleaseDo:D

答案 2 :(得分:2)

您可以将默认值定义为全局变量。然后,使用此全局变量作为函数的默认参数。

GLfloat default_colour[3] = {2.0, 3.0, 4.0};

void drawCircle(float radius, GLfloat colour[3] = default_colour, bool doit = true)
{
}

顺便说一下,do是关键字,您不能将其用作参数名称。

答案 3 :(得分:1)

你不能完全做你想做的事,但这个解决方案适用于我的编译器:

static GLFloat DefaultColour[]={2.0,3.0,4.0}
void drawCircle(float radius, GLfloat colour[]=DefaultColour, bool do=true) {
...
}

答案 4 :(得分:0)

我认为C ++ 11中的Initializer Lists功能可以帮助解决您的问题。

void drawCircle(float radius, std::initializer_list<float> colors = {0.9f, 0.2f, 0.7f}, bool do=true)
{

    if (colors.size() == 3)
    {
        // parse the values...
    }

...
}


// and then...

drawCircle(10.0f);

不幸的是我不确定你的编译器是否有这个功能:(