2014-10-20 36 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。