Производительность C ++: используйте getter в цикле или сначала сохраните его в переменной - PullRequest
2 голосов
/ 30 марта 2012

Мне было интересно, если использование геттера для получения одного и того же свойства снова и снова в цикле приводит к снижению производительности. Должен ли я сначала сохранить его в переменную? Пожалуйста, смотрите ниже примеры:

Используйте геттер напрямую:

for(int i=0; i<1000000; ++i) {
  print("Phone = %d\n", myobj->getCity("Foo")->getPhone(i);
}



EDIT:

А как насчет ограничения цикла?

for(int i=0; i<myobj->totalPhoneNum(); ++i) {...}

или

int totalPhoneNum = myobj->totalPhoneNum();
for(int i=0; i<totalPhoneNum; ++i) {...}

Ответы [ 2 ]

7 голосов
/ 30 марта 2012

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

1 голос
/ 30 марта 2012

Я предлагаю вам изменить его следующим образом: проверить на NULL

City* city = myobj->getCity("Foo");
if(city != NULL)
{    
     for(int i=0; i<1000000; ++i) 
     {
       print("Phone = %d\n", city ->getPhone(i);
     }
}

, если вы не выполняете myobj-> totalPhoneNum () в нескольких местах, которые можно вызватьтаким образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...