我正在尝试以下声明:
int (*(*((*foo)(const void *))()))[3];
和
int (*(*(*foo)(const void *)()))[3];
但是编译器给了我一个错误:
error: 'foo' declared as function returning a function
在c ++中完全可以吗?
答案 0 :(得分:8)
像这样:
int (*(*f())())[10];
甚至更干净(有点):
using array_type = int (*)[10];
using return_type = array_type (*)();
return_type f();
答案 1 :(得分:5)
使用cdecl。
cdecl> declare f as function returning pointer to function returning pointer to array 3 of int
int (*(*f())())[3]
答案 2 :(得分:5)
派生声明的工作方式是将声明中的标识符替换为您要派生的新事物。例如,在这里的第一步,从"指针到int [3]" to"函数返回指向int [3]"的指针,我们接受"指向int [3]"的声明,并将标识符更改为函数声明符。
指向int [3]的指针: int(* name)[3];
返回的函数:int(* name())[3];
指向它的指针:int(* (* name)())[3] - 括号需要,否则*
绑定到另一个*
而不是name
返回的函数:int(*(* name())())[3]