我只是在探索lambda表达式,并尝试使用它从使用C ++三元运算符的函数返回。但是,以下代码无法正常工作!
这是该程序的简化版本,用于解释我的实际问题,因此,请仅使用lambda而不是return(x + y + offset)来发布答案。
在成员函数'int Calculator :: add(int,int)'中:12:26:错误:否 匹配三元'operator?:'(操作数类型为'bool','int'和 'Calculator :: add(int,int)::
的结尾')16:3:警告:控制 到达非空函数[-Wreturn-type]
#include <iostream>
#include <string>
class Calculator
{
public:
bool initalized = false;
int offset = 0;
int add(int x, int y)
{
return !initalized ? -1 : [this, x, y]()
{
return ((x+y) + offset);
};
}
};
int main()
{
Calculator c;
c.initalized = true;
c.offset = 1;
printf("%d", c.add(2,10));
}
我在做什么错了?
答案 0 :(得分:1)
您的三元运算符尝试返回-1或lambda,它们没有通用类型。
您需要实际调用lambda:
return !initalized ? -1 : [this, x, y]()
{
return ((x+y) + offset);
}(); // <= added ()
或者没有lambda:
return !initalized ? -1 : x+y+offset;
答案 1 :(得分:0)
我在做什么错了?
三元表达式的真/假部分不兼容。您不能将-1
转换为lambda表达式,也不能将lambda表达式转换为int
。
我不清楚您要使用lambda表达式做什么,但是可以是:
return !initalized ? -1 : (x + y + this->offset);
如果出于某种原因需要使用lambda表达式,则必须调用lambda表达式。
return !initalized ? -1 : [this, x, y]() { return ((x+y) + this->offset); }();
// missing ^^