c – 是否可以在lambda中找到捕获变量的数量/类型?
发布时间:2020-12-16 06:49:59 所属栏目:百科 来源:网络整理
导读:当通过值或引用访问时,是否可以自动实现lambda捕获的变量数量?还有可能破译他们的类型?例如,假设这段代码: int a = 47;int b = 48;long long c = 49;auto f1 = [=](){ return a + b; };auto f2 = [=](){ return a + b + c; }; 是否有可能有一个名为count_
当通过值或引用访问时,是否可以自动实现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类型等等.因此,您可以捕获结构颜色{char R,G,B},而lambda实际上只存储.R和.G. count_args现在是2/3吗?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |