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

Return type of a lambda function is lambda []X ()->X and can't be converted to X

本文关键字:lambda gt 转换 不能 函数 返回类型      更新时间:2023-10-16

考虑一个具有构造函数Point(int _x, int _y, char _ch) :x(_x), y(_y), ch(_ch) {};的类Point,尝试将该类与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