2014-10-20 34 views
0

例如:仿型代碼對戰潛在浪費變量

//In this case, x is always declared but may not be used 
int x = 5; 
if(this()){ 
     if(x < y) 
      doThis(); 
} 
else if(that()){ 
     if (x < z) 
      doSomethingElse(); 
} 
else 
     dontNeedX(); 

//In this case, x is never declared unnecessarily but it is duplicated 
if(this()){ 
     int x = 5; 
     if(x < y) 
      doThis(); 
} 
else if(that()){ 
     int x = 5; 
     if (x < z) 
      doSomethingElse(); 
} 
else 
     dontNeedX(); 

這是從性能的角度與可讀性的角度來看比較好?

+0

編譯器應該能夠在第一種情況下優化x。如果它確實有所作爲......。如果x是一個更復雜的對象,並且它的構造有副作用,那麼情況可能並非如此。但對於整數,編譯器非常聰明地分配一個值爲5的變量。如果可能的話,它很可能會在檢查操作碼中硬編碼5(x86)。充其量,這是一個微型優化,最糟糕的是,你正在浪費你的時間,認爲你是編譯器的「更聰明」。 – Christopher 2014-10-20 16:57:10

回答

0

我懷疑表現是一個問題。可以證明,你有更多的重複開銷,但除非x是一個非常大的對象,否則應該沒有關係。 我的問題是'x'邏輯上是doThis和doSomethingElse中的同一個實體嗎? 如果它是相同的'東西'(可能是整數值x代表或其他對象),那麼使用#1,否則使用#2。