2012-02-26 64 views
1

我想知道如果& &運營商在級聯莊園工作。比較矩形碰撞檢查的下列實現。C++性能和操作員實例

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); 
} 

這兩者是相同的還是最高的一個操作更快?

+1

[**級聯莊園**](http://www.wright-house.com/frank-lloyd-wright/fallingwater-pictures/F1SW-fallingwater-in-fall.html) – 2012-02-26 10:19:14

+0

看起來很可愛。 – user936509 2012-02-26 10:20:19

回答

1

是,第二個版本基本上可以歸結爲第一。運營商的相關屬性是它的short-circuited:如果第一個操作數的計算結果爲true第二個操作數僅在必要時進行評估,也就是。否則,整個表達式將總是評估爲false所以沒有必要看第二個操作數。

此行爲是保證和類似,但相反,爲||/or

+0

謝謝很好的答案。 – user936509 2012-02-26 10:22:12

0

有沒有辦法,在頂部的版本更快然後在下面的一個。對我來說,下面的說明更清晰,所以我的建議是 - 更好地使用第二個版本。

+0

如果和操作符需要完成整個語句,那麼最上面的語句會更快。 – user936509 2012-02-26 10:21:06

+0

沒有操作員短路 - 在第一次失敗的情況下,整個陳述變爲虛假。因此,通過輪流檢查的所有條件左至右失敗renderes的聲明是假的,或者如果所有條件都滿足時返回true的第一個。 – 2012-02-26 10:23:03