包含通过引用捕获的 lambda 函数的 "variable" 的类型是什么?
What is the type of a "variable" containing a lambda function that captures by reference?
我正在对 lambda 函数进行快速试验,但我无法弄清楚如何在下面声明 testFunc
变量。
一般来说,一个函数指针可以这样定义:
int (*someFunc)(int, int) = otherFunction;
在没有任何闭包的情况下对 lambda 函数执行此操作时,它工作正常:
int (*someFunc)(int) = [](int a) -> int { return 0; };
但是,我在尝试通过引用捕获时遇到编译器错误:
void (*testFunc)() = [&]() -> void { /* code here */ };
如果我将 testfunc
声明为 auto
,它会起作用,但我很好奇上面的代码有什么问题?
很简单:
所有 lambda 都有独特的匿名类型。 (这就是 auto
起作用的原因)
没有捕获的 Lambda 可以转换为函数指针,但捕获的 lambda 不能。
我正在对 lambda 函数进行快速试验,但我无法弄清楚如何在下面声明 testFunc
变量。
一般来说,一个函数指针可以这样定义:
int (*someFunc)(int, int) = otherFunction;
在没有任何闭包的情况下对 lambda 函数执行此操作时,它工作正常:
int (*someFunc)(int) = [](int a) -> int { return 0; };
但是,我在尝试通过引用捕获时遇到编译器错误:
void (*testFunc)() = [&]() -> void { /* code here */ };
如果我将 testfunc
声明为 auto
,它会起作用,但我很好奇上面的代码有什么问题?
很简单:
所有 lambda 都有独特的匿名类型。 (这就是 auto
起作用的原因)
没有捕获的 Lambda 可以转换为函数指针,但捕获的 lambda 不能。