转发声明是否固定了参数的数量? 我现在正在学习C++,并做了一些自学实验。< /P>
似乎,如果一个函数是用默认值指定的变量声明的,那么该函数不需要那些具有默认值的变量的参数转发声明是否固定了参数的数量? 我现在正在学习C++,并做了一些自学实验。< /P>,c++,C++,似乎,如果一个函数是用默认值指定的变量声明的,那么该函数不需要那些具有默认值的变量的参数 int foo(int a, int b, int c = 3) { return a+b+c; } int main() { int q = foo(2,5); //results 10 printf("result is %d \n", q); } 然而,如果我进行前向声明,编译器会抱怨参数的数量 int foo(int a, int b, int c); int main
int foo(int a, int b, int c = 3)
{
return a+b+c;
}
int main()
{
int q = foo(2,5); //results 10
printf("result is %d \n", q);
}
然而,如果我进行前向声明,编译器会抱怨参数的数量
int foo(int a, int b, int c);
int main()
{
int q = foo(2,5); //compiler error
printf("result is %d \n", q);
}
int foo(int a, int b, int c = 3)
{
return a+b+c;
}
错误:函数“int foo(int,int,int)”的参数太少
为什么会这样?简单地说,原型需要包含默认参数值:
int foo(int a, int b, int c = 3);
定义函数时,忽略它:
int foo(int a, int b, int c)
{
return a+b+c;
}
简单地说,原型需要包含默认参数值:
int foo(int a, int b, int c = 3);
定义函数时,忽略它:
int foo(int a, int b, int c)
{
return a+b+c;
}
因为默认参数是在调用函数时确定的,而不是在函数定义中。因此,在
main()
之前的声明中指定默认值(即,在您所谓的“前向声明”中),并从函数定义中省略它。函数定义中指定的默认值仅在调用函数时整个函数定义可见时才起作用(如第一个示例中所示),否则将忽略该值。若要在混淆处添加,您可以使用其他默认值添加额外声明。因为默认参数是在调用函数时确定的,而不是在函数定义中确定的。因此,在main()
之前的声明中指定默认值(即,在您所谓的“前向声明”中),并从函数定义中省略它。函数定义中指定的默认值仅在调用函数时整个函数定义可见时才起作用(如第一个示例中所示),否则将被忽略。若要在混淆时添加,可以使用其他默认值添加额外声明。