2013-07-30 1 views
1

У меня есть кодпроизводительность и читаемость на повторных функций

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

другой вариант

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

Второй является более удобным для чтения для меня. Но как его производительность? Is currentIndex() вычислено дважды в популярном компиляторе? Если currentIndex() - это большая функция, которая занимает некоторое процессорное время, компилятор будет оптимизировать второй, как первый?

+1

Имя переменной 'index' довольно ясно .. – Rapptz

+0

Что возвращает' currentIndex() '? Первый и второй примеры выглядят так, как будто они не совпадают. –

+0

yes, currentIndex() будет вызываться дважды во втором решении –

ответ

1

Первый, скорее всего, будет иметь лучшую производительность, а ИМО более читабельна, потому что, если вы просто позвоните currentIndex(), у вас нет информации об этом. Если вы присвоите его переменной, у вас есть ее для будущего использования.

компилятор не будет иметь никаких шансов на оптимизации взывать по многим причинам

  1. первого вызова мог бы изменить результат следующего вызова
  2. В, имеющих 2 вызова функции можно изменить вид состояние вашей программы
  3. Вероятно, целая куча других причин, почему я не могу думать о

Итак, в заключении нет никаких причин, почему бы вам не использовать первый вариант, я могу убедитесь, что большинство людей также найдут эту версию более читаемой. Присвоение данных имени является одним из краеугольных камней современного программирования, поэтому, если оно более читаемо для вас, когда данные не имеют имени, вы можете захотеть привыкнуть к переменным с именами

Другое примечание, чтобы сделать его более читаемые не используют auto, это лучше сохраняется для программирования шаблонов, где тип может быть болью, чтобы разобраться по своему усмотрению.

+0

Ницца, случайные dv месяцев после ответа на вопрос – aaronman

0

Для меня первый вариант не оставляет вопросов в производительности, и это то, что я бы предпочел.

Это, как говорится, все зависит от контекста, использования и стоимости currentIndex(). Если currentIndex() является тривиальным приемником, а Foo() не вызывается в какой-либо тяжелой петле, то есть небольшая разница, если таковая имеется.

+0

Я думаю, что на самом деле вопрос будет заключаться в том, что компилятор оптимизирует второй вызов (я сказал «нет») не вызывает его в два раза хуже, просто голова, чтобы вы не get downvoted :) – aaronman

Смежные вопросы