【问题标题】:Meaning of this complex declaration这个复杂声明的含义
【发布时间】:2013-10-27 23:07:12
【问题描述】:

考虑以下声明:

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."  

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

【问题讨论】:

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

标签: c++ function pointers return


【解决方案1】:

应用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 的指针(“双精度数组”,如果你想对其进行修饰)...

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

foo 是一个函数,它采用一个(指向采用 double 的函数的指针和指向返回 doubledouble 的指针)和 double...

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

foo 是一个函数,它带有一个(指向带有 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,它返回一个指向带有 a 的函数的指针double 和任何东西......

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

foo 是一个函数,它采用一个(指向采用 double 的函数的指针和一个指向返回 double 的指针)和一个 double,它返回一个指向采用 a 的函数的指针double 以及任何返回 double 的内容。

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

将 foo 声明为函数(指向函数的指针(双精度,双精度数组)返回双精度,双精度)返回指向函数的指针(双精度,...)返回双精度

【讨论】:

    【解决方案2】:

    请这样看:

      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)
    

    【讨论】:

    • 请回答问题
    猜你喜欢
    • 2016-02-26
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多