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

c – 具有std :: function不同签名的Lambda函数

发布时间:2020-12-16 05:00:31 所属栏目:百科 来源:网络整理
导读:我不明白为什么第三种情况没问题(即使lambda的参数类型与std :: function类型不同),而编译器抱怨第四种情况: functionint(int) idInt = [](int i) {return i;}; //OKfunctionint(int) idInt = [](int i) {return i;}; //OKfunctionint(int) idInt = [](int
我不明白为什么第三种情况没问题(即使lambda的参数类型与std :: function类型不同),而编译器抱怨第四种情况:
function<int(int)> idInt = [](int i) {return i;}; //OK
function<int(int&)> idInt = [](int &i) {return i;}; //OK
function<int(int&)> idInt = [](int i) {return i;}; //OK
function<int(int)> idInt = [](int &i) {return i;}; //ERROR!

解决方法

当你写:
function<int(int)> idInt = [](int &i) {return i;}; //ERROR!

然后你说idInt可以包装一个函数,闭包,…可以用int参数调用.但是在[](int& i){return i;};的情况下不是这样,因为你不能像这里一样用整数文字调用它:

auto fn = [](int &i) {return i;};
fn(1); // error - you try to bind temporary to reference

您可以通过更改签名来使用右值引用或const&来修复它:

std::function<int(int)> idInt1 = []( int &&i) {return i;};
std::function<int(int)> idInt2 = []( const int &i) {return i;};

(编辑:李大同)

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

    推荐文章
      热点阅读