通过值或引用访问时,是否可以自动实现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
和 .G
。 count_args
现在是 2/3rd 吗?
关于c++ - 是否可以在 lambda 中找到捕获变量的数量/类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32196058/