lambda 函数的返回类型是 lambda []X ()->X,不能转换为 X
Return type of a lambda function is lambda []X ()->X and can't be converted to X
考虑一个具有构造函数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
。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- EASTL矢量<向量<int>>连续的
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- AWS Lambda C++运行时权限被拒绝
- 捕获lambda中的std::数组
- 这 4 个 lambda 表达式之间有什么区别?
- 在实现文件中使用头文件的通用 lambda