gpt4 book ai didi

C++ 将逻辑运算符函数分配给变量

转载 作者:行者123 更新时间:2023-12-01 14:48:04 29 4
gpt4 key购买 nike

我试图将一个逻辑运算符函数分配给一个变量,但无法让它工作。我在用:

function<bool(double,double)> opFunct = less<bool>();
double highorlow = pOut.high;
if(pCheck){
opFunct = greater<bool>();
highorlow = pOut.low;
}
if(opFunct(highorlow,pStay.middle){
//never gets done
}

这段代码的问题是无论highorlow,pStay.middle double 是什么,它都会返回false。

我错过了什么?

谢谢

最佳答案

短版 :
less<bool>比较 bool s。使用 less<double>比较 double s(也在 greater<> 中)。

长版 :

这是个有趣的问题。具体来说,以下行是如何编译的?

function<bool(double, double)> opFunct = less<bool>();

毕竟 std::less<bool> :: operator()看起来像 bool(bool, bool) ,为什么匹配 bool(double, double) ?

那是因为检查 std::function 's constructor执行只是是否 less<bool>()可以调用为 bool(double, double) ,是的,它可以! double隐式转换为 bool , 0.0变成 false和任何其他值 true .

这显然不会产生预期的结果,因为例如 opFunct(1.0, 2.0)将调用 less(true, true)这将返回 false .

修复方法是更改​​ booldouble
function<bool(double, double)> opFunct = less<double>();

还有这里
    opFunct = greater<double>();

但是等等, std::function除了开销1,根据其余代码的外观,显示的片段可能会简化为:
if (pCheck ? pStay.middle < pOut.low : pOut.high < pStay.middle) {
// . . .
}

或者甚至
if (pStay.middle < pOut.low || pOut.high < pStay.middle) {
// both checks at once . . .
}

1 std::function代价是大约 48-96 字节的内存和一两个额外的间接访问。比较 version with std::function 的生成代码对比 version without std::function .

关于C++ 将逻辑运算符函数分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61395864/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com