【发布时间】:2021-11-30 20:57:08
【问题描述】:
所以,如果我们在以下源代码上运行gdb:
//...
auto myLambda1 = [&](int x){ printf("Hi, I got x=%d here\n",x);};
auto myLambda2 = [&](double y){ printf("Hi, I got y=%f here\n",y);};
//...
我会得到:
(gdb) ptype myLambda1
type = struct <lambda(int)> {
}
(gdb) ptype myLambda2
type = struct <lambda(double)> {
}
那么什么是编译器的 lambda 表达式?为什么是struct
【问题讨论】:
-
检查 cppinsights 以了解编译器如何为您的 lambdas 创建唯一的
classes/structs -
作为一般观察,请尝试改掉使用引用自动捕获的习惯。在这种情况下,捕获的需求为零。在更一般的情况下,通过引用捕获所有内容可能会导致非常难以调试的事故。