我有一个密码
void Foo()
{
auto index = currentIndex();
if (index.isValid())
index.doSomething();
}
另外一个选择
void Foo()
{
if (currentIndex().isValid())
currentIndex().doSomething();
}
第二个对我来说更具可读性。但是它的性能如何?在当前流行的编译器中,
currentIndex()
是否被计算两次?如果currentIndex()
是一个占用大量CPU时间的大型函数,编译器是否会将第二个优化为第一个? 最佳答案
前者可能会具有更好的性能,并且IMO更具可读性,因为如果仅自己调用currentIndex()
,则您将没有任何信息。如果将其分配给变量,则可以将其将来使用。
出于多种原因,编译器将没有机会优化调用
因此,总而言之,没有理由不使用第一个版本,我可以确保大多数人也会发现该版本更具可读性。将数据分配给名称是现代编程的基石之一,因此,如果在数据没有名称的情况下对数据更具可读性,则您可能希望习惯于使用具有名称的变量
另一个注意事项是,为了使其更具可读性,请不要使用auto,因为最好将其保存用于模板编程,因为模板编程可能很麻烦您自己弄清楚。
关于c++ - 重复功能的性能和可读性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17937596/