lambda函数的返回类型是lambda [] X() - > X,不能转换为X.

shi*_*zou -2 c++ syntax lambda c++11

考虑一个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, '%');};
Run Code Online (Sandbox Code Playgroud)

两者都导致错误:

没有合适的用户定义的转换从"lambda [] Point() - > Point"到"Point"存在

这是什么类型,以及如何使之成为X代替lambda []X ()->X

And*_*dyG 6

lambda的类型与其返回类型不同.你想先声明lambda:

auto func = [&]() -> Point {return Point(1, 2, '%');};
Run Code Online (Sandbox Code Playgroud)

然后调用它:

Point p = func();
Run Code Online (Sandbox Code Playgroud)

更重要的是,您不需要捕获列表中的任何内容([&]),因为您没有在周围范围内使用任何变量:

auto func = []() -> Point {return Point(1, 2, '%');};
Run Code Online (Sandbox Code Playgroud)

lambda的类型是一个你无法知道的编译时确定的类型,因此需要auto.