和运算符的c++性能及实例

c++ Performance Of And Operator With Example

本文关键字:实例 性能 c++ 运算符      更新时间:2023-10-16

我想知道&操作员在级联庄园中工作。比较以下矩形碰撞检查的实现。

inline bool RectInRect(RECT one,RECT two){
    if(one.left < two.right)
    if(one.right > two.left)
    if(one.top < two.bottom)
    if(one.bottom > two.top)
    return true;
    return false;
}

inline bool RectInRect(RECT one,RECT two){
        return (one.left < two.right && one.right > two.left &&
            one.top < two.bottom && one.bottom > two.top);
}

这两者是相同的还是最上面的一个运行得更快?

是的,第二个版本本质上可以归结为第一个版本。运算符的相关属性是短路:只有在必要时,即第一个操作数的求值结果为true时,才会对第二个操作数求值。否则,整个表达式将始终求值为false,因此无需查看第二个操作数。

这种行为是有保证的,并且与||/or类似,但情况正好相反。

上面的版本不可能比下面的版本更快。对我来说,下面的陈述更清楚,所以我的建议是——最好使用第二个版本。