у меня есть код
void Foo()
{
auto index = currentIndex();
if (index.isValid())
index.doSomething();
}
другой вариант
void Foo()
{
if (currentIndex().isValid())
currentIndex().doSomething();
}
Второй более читабелен для меня. Но как его производительность? Является currentIndex()
вычисляется дважды в текущем популярном компиляторе? Если currentIndex()
это большая функция, которая занимает некоторое время процессора, оптимизирует ли компилятор вторую как первую?
Первый, скорее всего, будет иметь лучшую производительность, и IMO будет более читабельным, потому что если вы просто позвоните currentIndex()
само по себе у вас нет информации об этом. Если вы присваиваете его переменной, у вас есть его для будущего использования.
Компилятор не сможет оптимизировать вызов по многим причинам
Итак, в заключение, нет причин, по которым вы бы не использовали первую версию, я могу заверить, что большинство людей также найдут эту версию более читабельной. Присвоение данных имени является одним из краеугольных камней современного программирования, поэтому, если оно более читабельно, когда у данных нет имени, вы можете захотеть привыкнуть к переменным с именами.
Еще одно замечание: чтобы сделать его более читабельным, не используйте auto, это лучше сохранить для программирования шаблонов, где определить тип может быть непросто.
Для меня первый вариант не оставляет вопросов в производительности, что я бы предпочел.
При этом все зависит от контекста, использования и стоимости currentIndex()
, Если currentIndex()
является тривиальным добытчиком, и Foo()
не вызывается в какой-то тяжелой петле, тогда есть небольшая разница, если таковая имеется.