Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转发声明是否固定了参数的数量? 我现在正在学习C++,并做了一些自学实验。< /P>_C++ - Fatal编程技术网

转发声明是否固定了参数的数量? 我现在正在学习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()
之前的声明中指定默认值(即,在您所谓的“前向声明”中),并从函数定义中省略它。函数定义中指定的默认值仅在调用函数时整个函数定义可见时才起作用(如第一个示例中所示),否则将被忽略。若要在混淆时添加,可以使用其他默认值添加额外声明。