考虑一个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"到"Point"存在
这是什么类型,以及如何使之成为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
.