1

我有一个代码

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

另外的选择

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

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

4

2 回答 2

1

第一个可能会有更好的性能,而且 IMO 更具可读性,因为如果你只是currentIndex()自己调用,你就没有关于它的信息。如果将其分配给变量,则可以将其留作将来使用。

由于许多原因,编译器没有机会优化调用

  1. 第一次通话可能会改变下一次通话的结果
  2. 函数的 2 次调用可以改变程序的状态
  3. 可能还有很多其他我想不出来的原因

所以总而言之,您没有理由不使用第一个版本,我可以保证大多数人也会发现该版本更具可读性。将数据分配给名称是现代编程的基石之一,因此如果当数据没有名称时它对您来说更具可读性,您可能希望习惯于有名称的变量

另一个注意事项,为了使其更具可读性,不要使用 auto,这更好地保存在模板编程中,因为你自己很难弄清楚类型。

于 2013-07-30T03:15:10.527 回答
0

对我来说,第一个选项在性能上没有任何问题,这是我更喜欢的。

话虽如此,这一切都取决于上下文、使用情况和currentIndex(). 如果currentIndex()是一个微不足道的吸气剂,并且Foo()没有在一些繁重的循环中被调用,那么几乎没有区别(如果有的话)。

于 2013-07-30T03:07:44.280 回答