通过值或引用访问时,是否可以自动实现lambda捕获的变量数量?还有可能破译它们的类型吗?例如,假设这段代码:

int a = 47;
int b = 48;
long long c = 49;
auto f1 = [=](){ return a + b; };
auto f2 = [=](){ return a + b + c; };

如果像下面这样调用,是否可以有一个名为 count_args 的函数,该函数在一行中返回 2,在下一行中返回 3
std::cout << count_args( f1 ) << "\n" << count_args( f2 );

最佳答案

不,因为这个问题隐含地假设捕获的变量实际上是成员变量。然而,编译器被授予了更大的自由度。正如 Ajay 在评论中指出的那样,一个体面的优化器可以用提升的表达式替换成员,它也可以改变类型,使用非 C++ 类型等。因此,您可以捕获 struct color { char R,G,B } 而 lambda 实际上仅存储 .R.Gcount_args 现在是 2/3rd 吗?

关于c++ - 是否可以在 lambda 中找到捕获变量的数量/类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32196058/

10-12 14:48
查看更多