Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ lambda函数的返回类型为lambda[]X()->;X和can';不能转换成X_C++_C++11_Syntax_Lambda - Fatal编程技术网

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中的函数中创建类的主要原因)。是的,你会有一个函子的实例。