我正在使用lambda函数进行快速实验,而我却无法弄清楚如何在下面声明testFunc
变量。
一般来说,函数指针可以定义如下:
int (*someFunc)(int, int) = otherFunction;
当为没有任何闭包的lambda函数执行此操作时,它可以正常工作:
int (*someFunc)(int) = [](int a) -> int { return 0; };
但是,尝试通过引用捕获时出现编译器错误:
void (*testFunc)() = [&]() -> void { /* code here */ };
如果我将testfunc
声明为auto
,它会有效,但我很好奇上述代码有什么问题?
答案 0 :(得分:2)
这很简单:
所有lambdas都有独特的匿名类型。 (这就是为什么auto
有效)
没有捕获的Lambda可以转换为函数指针,但捕获lambdas不是。