考虑比较正整数的函数;该函数本身使用lambda来做这个工作.
// Pass n1,n2 by value to the lambda. bool Compare(int n1,int n2) { return [](int n1,int n2) { return n1 > n2; }; }
上面的代码段编译好了虽然Compare()总是返回true;
但是,以下代码甚至无法编译 –
// capturing values bool Compare(int n1,int n2) { return [n1,n2]() -> bool { return n1 > n2; }; }
并返回错误
lambda.cpp:48:46: error: cannot convert 'Compare(int,int)::__lambda2' to 'bool' in return return [n1,n2]() -> bool { return n1 > n2; };
题
可能这些不是在C中引入lambda的意图,仍然…
为什么第一个总是返回true?
为什么第二次无法编译?
解决方法
Why the first one always returns true?
Lambdas衰减为函数指针,它们隐式转换为布尔(对于lambdas,始终为true,因为指针永远不为空).
Why second fails to compile?
捕获任何东西的Lambdas没有转换为函数指针(该状态如何通过?)
如果你必须使用lambda:
叫它:
return [](int n1,int n2) { return n1 > n2; }(n1,n2); //notice the () to call it
或者,你的第二种方式,这更有意义,但不如只是返回n1> N2:
return [=] { return n1 > n2; }(); //= captures everything used by value //-> bool and parameter list are redundant
最后,值得注意的是,< functional>中的std :: greater已经这样做了:
std::sort(…,std::greater<int>()); //std::greater<> in C++14
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。