加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读