C++ 这一复杂声明的意义

C++ 这一复杂声明的意义,c++,function,pointers,return,C++,Function,Pointers,Return,考虑以下声明: double(*foo(double (*)(double, double[]), double)) (double, ...) 用英语描述foo的类型 这是一个家庭作业问题。我的分析是: "foo is a function pointer to a function that has as it's first argument, another function pointer to a function that returns a double and ta

考虑以下声明:

double(*foo(double (*)(double, double[]), double)) (double, ...)  
  • 用英语描述foo的类型
这是一个家庭作业问题。我的分析是:

"foo is a function pointer to a function that has as it's first argument, 
another function pointer to a function that returns a double and takes a 
double and an array of doubles."  

是这样吗?有人能用英语简化并指定正确/准确的表达方式吗?提前谢谢

请这样看:

  double(*foo(double (*)(double, double[]), double)) (double, ...);
  == double(*foo(FUNC_PTR, double)) (double, ...)
  where FUNC_PTR is of the form => double(*)(double first_arg, double[] second_arg)
应用,记住向右、向左、向右、向左等,在退出括号之前始终执行括号中的任何操作:

double(*foo(double (*)(double, double[]), double)) (double, ...)  
        ^^^
foo

double(*foo(double (*)(double, double[]), double)) (double, ...)  
           ^------------------------------------^
foo
是一个函数

double(*foo(double (*)(double, double[]), double)) (double, ...)  
                    ^
double(*foo(double (*)(double, double[]), double)) (double, ...)  
                       ^^^^^^^^^^^^^^^^
double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                    ^^^^^^^^^^^
foo
是一个函数,它将指针指向

double(*foo(double (*)(double, double[]), double)) (double, ...)  
                      ^----------------^
foo
是一个指向函数的指针的函数

double(*foo(double (*)(double, double[]), double)) (double, ...)  
                    ^
double(*foo(double (*)(double, double[]), double)) (double, ...)  
                       ^^^^^^^^^^^^^^^^
double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                    ^^^^^^^^^^^
foo
是一个函数,它的指针指向一个采用
double
的函数,指针指向一个
double
(“double数组”,如果你想给它加糖衣的话)

foo
是一个函数,它使用a(指向函数的指针使用
double
,指向返回
double
)的
double
)和
double

double(*foo(double (*)(double, double[]), double)) (double, ...)  
       ^
foo
是一个函数,它接受一个(指向接受
double
的函数的指针,以及指向返回
double
double
的指针)和一个返回指向

double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                   ^-----------^
foo
是一个函数,它接受(指向接受
double
的函数的指针,以及指向返回
double
double
的指针)和返回函数指针的
double

double(*foo(double (*)(double, double[]), double)) (double, ...)  
                    ^
double(*foo(double (*)(double, double[]), double)) (double, ...)  
                       ^^^^^^^^^^^^^^^^
double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                    ^^^^^^^^^^^
foo
是一个函数,它接受一个(指向接受
double
的函数的指针,以及指向返回
double
double
的指针)和一个返回指向接受
double
的函数的
double
指针以及任何

double(*foo(double (*)(double, double[]), double)) (double, ...) 
^^^^^^
foo
是一个函数,它使用a(指针指向使用
double
的函数,指针指向返回
double
double
)和
double
的函数,指针指向使用
double
的函数和任何返回
double
的函数

将整个过程插入到中会得到以下结果(除了它不喜欢省略号参数):

将foo声明为函数(指向函数的指针(double,double的数组)返回double,double)返回指向函数的指针(double,…)返回double


请回答以下问题:
foo
的类型是“由于可怕的代码无法通过我的团队的代码审查而过度指定的,实际上可能会让你被解雇”。任何专业人士都可以验证。