在 C++ 三元运算符中使用 lambda 表达式:错误类型不匹配
Use of lambda expression in C++ ternary operator : error type mismatch
我只是在探索 lambda 表达式,并尝试将其用于 return 来自使用 C++ 三元运算符的函数。但是,下面的代码无法正常工作!
这是程序的简化版本,非常友好地解释了我的实际问题post 仅使用 lambda 回答,而不仅仅是 return (x+y+offset) .
In member function 'int Calculator::add(int, int)': 12:26: error: no
match for ternary 'operator?:' (operand types are 'bool', 'int', and
'Calculator::add(int, int)::<lambda()>') 16:3: warning: control
reaches end of non-void function [-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));
}
我做错了什么?
What am I doing wrong here?
三元表达式的 true/false 部分不兼容。您不能将 -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 ^^
您的三元运算符尝试 return -1 或 lambda,它们没有通用类型。
您需要实际调用 lambda:
return !initalized ? -1 : [this, x, y]()
{
return ((x+y) + offset);
}(); // <= added ()
或者没有 lambda:
return !initalized ? -1 : x+y+offset;
我只是在探索 lambda 表达式,并尝试将其用于 return 来自使用 C++ 三元运算符的函数。但是,下面的代码无法正常工作!
这是程序的简化版本,非常友好地解释了我的实际问题post 仅使用 lambda 回答,而不仅仅是 return (x+y+offset) .
In member function 'int Calculator::add(int, int)': 12:26: error: no match for ternary 'operator?:' (operand types are 'bool', 'int', and 'Calculator::add(int, int)::<lambda()>') 16:3: warning: control reaches end of non-void function [-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));
}
我做错了什么?
What am I doing wrong here?
三元表达式的 true/false 部分不兼容。您不能将 -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 ^^
您的三元运算符尝试 return -1 或 lambda,它们没有通用类型。
您需要实际调用 lambda:
return !initalized ? -1 : [this, x, y]()
{
return ((x+y) + offset);
}(); // <= added ()
或者没有 lambda:
return !initalized ? -1 : x+y+offset;