c++ - 包含通过引用捕获的 lambda 函数的 "variable"的类型是什么?

标签 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 就可以了,但我很好奇上面的代码有什么问题?

最佳答案

这很简单:

所有的 lambda 都有独特的匿名类型。 (这就是 auto 起作用的原因)

没有捕获的 Lambda 可以转换为函数指针,但捕获 lambda 则不能。

关于c++ - 包含通过引用捕获的 lambda 函数的 "variable"的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177126/

相关文章:

c# - 使用 lambda 对多列进行分组

.net - Lambda 表达式 "Contains"

c - 定义一个包含函数指针的结构,该函数指针指向以该结构作为参数的函数

c++ - push_back 上的段错误

c# - 如何使用 LINQ 从 IEnumerable 中选择随机项

c++ - C 中用 1 替换 0 的宏

c - 根据 C 标准,将函数转换为指向各种函数的指针是否合法?

C 将字符串映射到函数

c++ - 修改另一个类的 vector 成员时出错

c++ - 外部 vs 单例类