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

Car*_*ven 4 c++ arrays function

可能重复:
数组参数的默认值

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

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

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

Alo*_*ave 7

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

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

你可以这样做:

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

void drawCircle(float radius, GLfloat colour[3]= defaultColor, bool do=true)
{
}
Run Code Online (Sandbox Code Playgroud)


Naw*_*waz 6

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

另请注意,这do是一个关键字,因此您不能将其用作变量名.我用它代替了pleaseDo:D

  • 匿名的downvotes是令人讨厌的.我会废除这一点,因为你的回答是正确的.一件小事,因为OP特别关于数组大小3,我认为你可以将第二个参数设为`GLfloat(&color)[3]`; 不是吗 (2认同)
  • @xEnOn:不.`colour`是一个类型为`GLfloat [3]`的数组,它会衰减成指针类型`GLfloat*`. (2认同)
  • @xEnOn,如果你特别关注数组大小3那么,定义为`drawCircle(float radius,float(&color)[3],bool pleaseDo);`和不,你不必以特殊的方式传递; 就这样过去吧 (2认同)