[英]C++ Speed and Logical Flow
我想知道在下面的案例B和案例A(反之亦然)中是否有任何速度優勢:
bool test1(){
// Check something, return true/false
}
bool test2(){
// Check something, return true/false
}
案例A.
if(test1() && test2()){
//execute XYZ
}
案例B
if(test1()){
if(test2()){
//execute XYZ
}
}
我的意思是,如果test1()
和test2()
涉及的例程需要一些時間來執行,那么直覺上有些人可能會認為Case B可能運行得更快,因為test2()
只會在test 1為真時執行,或者是編譯器足夠智能,在案例A的邏輯順序中確定,一旦test1(...)
失敗,那么test2(...)
不需要檢查?
也許以上是相同的,有人可以讓我知道......
is the compiler smart enough to determine
是否為,這稱為短路評估 ,並與&&
, ||
和?
操作員(除非你超載),如第5.14,5.15和5.16段的標准所述。
它們是等價的,如果test1
返回false,則在兩種情況下都不會執行test2
。
在這兩種情況下,如果測試1為假,則不會執行測試2。 它們在這方面完全相同。
案例A優於案例B以提高可讀性。 您可以在一行中看到兩者都必須為true,並且通過排序可以看到首先檢查測試1。
例如,在java中,如果答案已經存在,他可以避免一些測試。 我現在沒有太多時間來測試這個案例。 但是你可以輕松測試,在test2()上做一個非常慢的rotine並在test1()上給出一個antecipate答案。 然后,如果快速回答。 C ++的工作方式與Java類似。
在您的示例中,如果test1()的返回值為false,則只有您具有antecipate答案。 換句話說,test2()是必需的。
如果你可以等,我今晚將測試這個案子。
Case A
運行得更快,這是證明它的兩個原因。
1.它會對&&
, ||
進行短路評估 邏輯運算符等等,因此Case A
可能比Case B
花費更少的時間
2. if
聲明將轉換為jmp
匯編語言,則需要花費更多時間來執行。 因此Case B
將比Case A
花費更多時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.