我只是探索lambda表达式,并尝试使用它从函数返回使用C++三元操作符。但是,下面的代码不能与错误一起工作!
这是一个简化的程序版本,用来解释我的实际问题,所以请只使用lambda,而不只是返回(x+y+offset)。
成员函数'int::添加(int,int)':12:26:
:不匹配三元‘操作符?:’(操作数类型为'bool','int',和'Calculator::add(int,int)::
#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));
}我在这里做错什么了?
发布于 2020-09-16 04:13:03
您的三元操作符尝试返回-1或lambda,它们没有公共类型。
你得给兰达打个电话:
return !initalized ? -1 : [this, x, y]()
{
return ((x+y) + offset);
}(); // <= added () 或者没有灯笼:
return !initalized ? -1 : x+y+offset;发布于 2020-09-16 04:09:00
,我在这里做错了什么?
三元表达式的真假部分不兼容。不能将-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 ^^https://stackoverflow.com/questions/63912955
复制相似问题