[英]C++: Issue with lambda function and capture list
我有以下功能:
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 < mx
或0 < mx
。
您的问题在这里(mn<y<mx)
,可以理解为
(mn < y) < mx
这意味着, mn < y
第一个mn < y
进行求值,这将导致bool
类型的结果,并且为ture
或false
。 最后将结果与mx
进行比较。
您尝试做的是检查mn < y
和 y < mx
,必须这样表示:
if (mn<y && y<mx)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.