c++ - 这个复杂声明的含义

标签 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 takes a 
double and an array of doubles."  

是吗?任何人都可以用英语简化和指定正确/准确的表示吗?提前致谢!

最佳答案

应用spiral rule ,记住向、向左、向右、向左等方向移动,在退出之前始终执行括号中的操作:

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

foo 是一个...

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

foo 是一个函数...

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

foo 是一个带有指向...的指针的函数

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

foo 是一个接受函数指针的函数...

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

foo 是一个函数,它接受一个指向接受 double 的函数的指针和一个指向 double 的指针(“array of double” if你想给它涂糖衣)......

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

foo 是一个函数,它接受一个(指向一个接受 double 的函数的指针和一个指向返回 double 的指针double) 和一个 double...

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

foo 是一个函数,它接受一个(指向一个接受 double 的函数的指针和一个指向返回 double 的指针double) 和一个 double 返回指向...的指针

double(*foo(double (*)(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, ...) 
^^^^^^

foo 是一个函数,它接受一个(指向一个接受 double 的函数的指针和一个指向返回 double 的指针double) 和一个 double,它返回一个指向接受 double 和任何返回 double 的函数的指针。

将整个内容插入 cdecl给我这个(除了它不喜欢省略号参数):

declare foo as function (pointer to function (double, array of double) returning double, double) returning pointer to function (double, ...) returning double

关于c++ - 这个复杂声明的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460946/

相关文章:

c++ - SizeOfImage 成员导致程序崩溃

JavaScript:使用 forEach 查看数组是否包含特定数字值

javascript - 是否可以拦截对图像的http调用并用javascript更改它们?

c - 在 C 中打印一个 int

c++ - float 数组对齐错误

c++ - 基于范围的for循环对性能有好处吗?

c++ - 如何确定数据是从磁盘还是从缓存中检索出来的?

javascript - JS : Assignment within if statment doesn't work

c++ - 迭代器中的非标准语法错误? (C++)

c - 指针和字符串操作