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

c – 为什么“auto”不能作为lambda参数接受

发布时间:2020-12-16 09:59:16 所属栏目:百科 来源:网络整理
导读:为什么这段代码会产生编译错误? std::find_if(std::begin(some_list),std::end(some_list),[](const auto item){//some code}); 当然在“自动”的错误?为什么不能自动知道类型? 谢谢 解决方法 这是因为从C 11开始,C中的lambda函数无法一般定义,因此您无法
为什么这段代码会产生编译错误?

std::find_if(std::begin(some_list),std::end(some_list),[](const auto& item){
//some code
});

当然在“自动”的错误?为什么不能自动知道类型?
谢谢

解决方法

这是因为从C 11开始,C中的lambda函数无法一般定义,因此您无法使用auto声明参数.这已经在C 14中添加(并且已经被一些编译器支持).

但是,你可以使用decltype()在C 11中实现相同的功能,在你的情况下:

std::find_if(std::begin(some_list),[](decltype(*some_list.begin())& item){
        return item > 4;

(编辑:李大同)

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

    推荐文章
      热点阅读