什么是"变量"包含通过引用捕获的lambda函数?

时间:2018-01-09 21:46:52

标签: c++ lambda function-pointers

我正在使用lambda函数进行快速实验,而我却无法弄清楚如何在下面声明testFunc变量。

一般来说,函数指针可以定义如下:

int (*someFunc)(int, int) = otherFunction;

当为没有任何闭包的lambda函数执行此操作时,它可以正常工作:

int (*someFunc)(int) = [](int a) -> int { return 0; };

但是,尝试通过引用捕获时出现编译器错误:

void (*testFunc)() = [&]() -> void { /* code here */ };

如果我将testfunc声明为auto,它会有效,但我很好奇上述代码有什么问题?

1 个答案:

答案 0 :(得分:2)

这很简单:

所有lambdas都有独特的匿名类型。 (这就是为什么auto有效)

没有捕获的Lambda可以转换为函数指针,但捕获lambdas不是。