Lambda使用会产生转换错误

时间:2017-01-20 06:57:41

标签: c++ visual-studio-2015 lambda

我使用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); };

1 个答案:

答案 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); })();
  • 请注意额外的括号。