我有一个密码

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

另外一个选择
void Foo()
{
    if (currentIndex().isValid())
        currentIndex().doSomething();
}

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

最佳答案

前者可能会具有更好的性能,并且IMO更具可读性,因为如果仅自己调用currentIndex(),则您将没有任何信息。如果将其分配给变量,则可以将其将来使用。

出于多种原因,编译器将没有机会优化调用

  • 第一个调用可能已更改下一个调用的结果
  • 函数的2个调用可以更改程序的状态
  • 可能还有很多其他原因,我无法想到

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

    另一个注意事项是,为了使其更具可读性,请不要使用auto,因为最好将其保存用于模板编程,因为模板编程可能很麻烦您自己弄清楚。

    关于c++ - 重复功能的性能和可读性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17937596/

    10-10 05:24