簡體   English   中英

C ++速度和邏輯流程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM