我正在尝试编写一个返回函数指针的函数。这是我的最小示例:
void (*myfn)(int)() // Doesn't work: supposed to be a function called myfn
{ // that returns a pointer to a function returning void
} // and taking an int argument.
当我编译这个时g++ myfn.cpp
它打印这个错误:
myfn.cpp:1:19: error: ‘myfn’ declared as function returning a function
myfn.cpp:1:19: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
这是否意味着我不允许返回函数指针?
你可以返回一个函数指针,正确的语法如下:
void (*myfn())(int)
{
}
完整示例:
#include <cstdio>
void retfn(int) {
printf( "retfn\n" );
}
void (*callfn())(int) {
printf( "callfn\n" );
return retfn;
}
int main() {
callfn()(1); // Get back retfn and call it immediately
}
其编译和运行如下:
$ g++ myfn.cpp && ./a.out
callfn
retfn
如果有人对为什么 g++ 的错误消息表明这是不可能的有一个很好的解释,我很想听听。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)