我使用lambda作为家庭作业。对于我所见过的,它是一种匿名的,封装的各种功能。我做了一个小测试,只返回两个给定值的最大值,如max()。
double testx, testy = 0.0;
// Give the above some values
double maxi = [testx, testy] () {return (testx > testy ? testx : testy); };
在每次编译这个lambda的尝试中,都会出现构建错误。 (代码C2440)
没有合适的转换函数来自" lambda [] double() - > double"至 "双"存在
我尝试的不仅仅是这个例子,每个都是用上面的错误和相应的返回类型进行的。有一个related question,似乎在早期版本的Visual Studio中给出了与我相同的错误,给出了为了他们的目的避免使用lambda的答案。
double maxi = [testx, testy] () -> double {return (testx > testy ? testx : testy); };
答案 0 :(得分:1)
您收到此错误是因为您尝试将lambda表达式本身分配给double类型的变量。编译器错误就是这样说的。你应该做的是将lambda分配给一个可以容纳它的变量:
auto l = [testx, testy] () {return (testx > testy ? testx : testy); };
或
std::function<double()> l = [testx, testy] () {return (testx > testy ? testx : testy); };
然后分配调用的结果:
double res = l();
或者,您可以立即调用lambda:
double maxi = ([testx, testy] () {return (testx > testy ? testx : testy); })();