C++ C++;性能:在循环中使用getter或先将其保存到变量
我想知道在循环中使用getter一次又一次地获取相同的属性是否会影响性能。我应该先将其保存到变量中吗?请参见以下示例:C++ C++;性能:在循环中使用getter或先将其保存到变量,c++,performance,loops,C++,Performance,Loops,我想知道在循环中使用getter一次又一次地获取相同的属性是否会影响性能。我应该先将其保存到变量中吗?请参见以下示例: 直接使用getter: for(int i=0; i<1000000; ++i) { print("Phone = %d\n", myobj->getCity("Foo")->getPhone(i); } for(inti=0;igetCity(“Foo”)->getPhone(i); } 编辑: 循环约束呢 for(int i=0; i<
直接使用getter:
for(int i=0; i<1000000; ++i) {
print("Phone = %d\n", myobj->getCity("Foo")->getPhone(i);
}
for(inti=0;igetCity(“Foo”)->getPhone(i);
}
编辑: 循环约束呢
for(int i=0; i<myobj->totalPhoneNum(); ++i) {...}
(int i=0;itotalPhoneNum();++i){…}
或
int totalPhoneNum=myobj->totalPhoneNum();
对于(int i=0;i是的,您应该这样做。无论它是否对性能有任何影响,它的语义都更清晰。通过先将其保存到变量,您可以指示它是循环不变量。我建议您这样修改它,以检查NULL
City* city = myobj->getCity("Foo");
if(city != NULL)
{
for(int i=0; i<1000000; ++i)
{
print("Phone = %d\n", city ->getPhone(i);
}
}
City*City=myobj->getCity(“Foo”);
如果(城市!=NULL)
{
用于(int i=0;igetPhone(i);
}
}
除非您在两个地方没有执行myobj->totalPhoneNum(),否则可以通过这种方式调用只有当getter的参数依赖于某个循环变量时,才应该在循环中使用getter。在您的情况下,它是“常量”因此,您应该将其保存到一个变量中。它将更可读。刚刚更新了我的问题,循环约束如何?我认为一行更可读、更清晰,但totalPhoneNum在这里是一个常量。哪一行更可取?以防您错过我对(现在已删除)的评论答案是,编译器无法优化它,除非它能够证明totalPhoneNum()
是常量且没有副作用。如果该函数甚至有点不平凡,您可能最好手动将其拉出。我认为在第二种情况下,myobj->totalPhoneNum()可以使用,因为它只返回一个常量。@user396672是的,也是这样!这也是我几乎总是喜欢手动执行的原因之一。有太多的死角情况会阻止编译器为您执行此操作。假设它实际上是一个循环不变量,并且在循环过程中无法更改。@Jeff,第二个呢我的问题中的大小写?听起来两种方法没有太大的区别(?)。相同的参数适用。您不希望每次在循环中计算myobj->totalPhoneNum()
,因为它是一个循环不变量。将它拉到一个变量中会更清楚。
City* city = myobj->getCity("Foo");
if(city != NULL)
{
for(int i=0; i<1000000; ++i)
{
print("Phone = %d\n", city ->getPhone(i);
}
}