C++:lambda函数和捕获列表的问题

C++: Issue with lambda function and capture list

本文关键字:列表 问题 lambda 函数 C++      更新时间:2023-10-16

我有以下功能:

double mn = 2.0;
double mx = 5.0;
auto isBetween = [&,mx,mn](double y) -> bool{
    if (mn<y<mx) {
        return true;
    } else {
        return false;
    }
};

但是,当我调试时,我作为double y传递的所有值都返回true。

我缺了什么吗?

您的测试if (mn<y<mx)不是您想要的。

你想要的是:if (mn < y && y < mx)

在C++中,<运算符不能像数学中那样链式。在表达式(mn < y < mx)中,(mn < y)的计算结果为1(true)或0(false),由此表达式等效于1 < mx0 < mx

您的问题在这里(mn<y<mx),可以读取为

(mn < y) < mx

这意味着,第一个mn < y被评估,这导致类型为bool的结果,并且是turefalse。最后将结果与CCD_ 14进行了比较。

您试图做的是检查,如果mn < yy < mx,则必须这样表示:

if (mn<y && y<mx)