2013-07-30 22 views
1

我有一个代码性能和可读性上反复功能

void Foo() 
{ 
    auto index = currentIndex(); 
    if (index.isValid()) 
     index.doSomething(); 
} 

另一种选择

void Foo() 
{ 
    if (currentIndex().isValid()) 
     currentIndex().doSomething(); 
} 

第二个对我来说更具有可读性。但它的表现如何? currentIndex()在当前流行的编译器中计算两次吗?如果currentIndex()是一个占用CPU时间的大函数,编译器是否会优化第二个作为第一个?

+1

变量名'index'很清楚.. – Rapptz

+0

'currentIndex()'返回什么?第一个和第二个例子看起来不一样。 –

+0

是的,currentIndex()将在第二个解决方案中调用两次 –

回答

1

第一个可能会有更好的性能,而IMO更具可读性,因为如果你自己打电话给currentIndex(),你就没有任何信息。如果你将它分配给一个变量,你有它将来使用。

编译器就没有机会优化召唤出来的,原因是多方面

  1. 第一个电话可能已经改变了下一个调用的结果
  2. 功能的有2个呼叫可改你的程序的状态
  3. 可能是其他原因一大堆我想不出

所以在最后,没有理由你不使用的第一个版本,我可以保证大多数人也会发现该版本更具可读性。将数据分配给名字是现代程序设计的基石之一,因此,如果数据没有名字时,数据更具可读性,您可能需要习惯变量名称

另一个说明,为了使它更加可读不使用自动,这更好地保存模板编程,其中类型可能是一个痛苦找出你自己的。

+0

好,随机答复问题后的dv个月 – aaronman

0

对我而言,第一个选项不会在表演中留下任何问题,这是我更喜欢的。

这就是说,这一切都取决于上下文,用法和currentIndex()的成本。如果currentIndex()是一个微不足道的getter,并且Foo()在某个重循环中没有被调用,那么几乎没有什么区别。

+0

我认为问题实际上是编译器是否会优化第二个调用(我说不是)不会调用它两次更糟糕,只是一个人抬头,所以你不会得到downvoted :) – aaronman