C++ lambda函数的返回类型为lambda[]X()->;X和can';不能转换成X
考虑一个类C++ lambda函数的返回类型为lambda[]X()->;X和can';不能转换成X,c++,c++11,syntax,lambda,C++,C++11,Syntax,Lambda,考虑一个类Point,它有一个构造函数Point(int x,int y,char ch):x(x),y(y),ch(ch){},正在尝试将此类与lambda函数一起使用: Point p = [&]() {return Point(1, 2, '%');}; Point p = [&]() -> Point {return Point(1, 2, '%');}; 两者都会导致错误: 不存在从“lambda[]点()->点”到“点”的合适的用户定义转换 这种类型是什么?如
Point
,它有一个构造函数Point(int x,int y,char ch):x(x),y(y),ch(ch){}代码>,正在尝试将此类与lambda函数一起使用:
Point p = [&]() {return Point(1, 2, '%');};
Point p = [&]() -> Point {return Point(1, 2, '%');};
两者都会导致错误:
不存在从“lambda[]点()->点”到“点”的合适的用户定义转换
这种类型是什么?如何使其成为X
而不是lambda[]X()->X
?lambda的类型与其返回类型不同。您希望首先声明lambda:
auto func = [&]() -> Point {return Point(1, 2, '%');};
然后称之为:
Point p = func();
此外,您不需要捕获列表中的任何内容([&]
),因为您没有在周围范围中使用任何变量:
auto func = []() -> Point {return Point(1, 2, '%');};
lambda的类型是编译时确定的类型,您无法知道,因此需要auto
为什么要尝试将lambda分配给Point
类型的变量?你想要一个点
,还是想要一个有意义的lambda?哦,我认为作为一个“匿名”函数,你实际上不能声明它,可能在解释这个的网站上也错过了它……是的,我知道[&]
,这只是一个简单的例子,在我使用的真正lambda函数中,我需要[&]
。有些人认为将lambda称为“匿名函数”是一种用词不当的说法。它们实际上只是编译器就地创建的奇特函子(这是我们可以在C++11中的函数中创建类的主要原因)。是的,你会有一个函子的实例。