C ++性能:在循环中使用getter或首先将其保存到变量中

时间:2012-03-30 09:33:36

标签: c++ performance loops

我想知道是否使用getter在循环中反复获取相同的属性会有任何性能损失。我应该先将它保存到变量吗?请看下面的例子:

直接使用getter:

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



修改

循环约束怎么样?

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

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

2 个答案:

答案 0 :(得分:7)

是的,你应该。无论它在性能上是否有任何不同,它在语义上都更加清晰。首先将它保存到变量,表明它是一个循环不变量。

答案 1 :(得分:1)

我建议您将其修改为检查NULL

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

除非你没有在几个地方做myobj-&gt; totalPhoneNum(),否则可以通过这种方式调用