这是我几个月前接受的一道面试题:
以下哪个函数会执行得更快,Foo1
还是 Foo2
?
void Foo(SomeObjectArray** array, unsigned int size)
{
for (int i = 0; i < size; i++)
{
if (((*array) + i) != NULL)
{
((*array) + i)->Operation1();
((*array) + i)->Operation2();
((*array) + i)->Operation3();
((*array) + i)->Operation4();
((*array) + i)->Operation5();
((*array) + i)->Operation6();
}
}
void Foo(SomeObjectArray** array, unsigned int size)
{
for (int i = 0; i < size; i++)
{
if (*((*array) + i) != NULL)
{
Object& obj = *((*array) + i);
obj.Operation1();
obj.Operation2();
obj.Operation3();
obj.Operation4();
obj.Operation5();
obj.Operation6();
}
}
}
请注意,由于这是我从记忆中翻译的,所以我不记得代码确切的内容,但是基本思路是相同的。一个函数使用指针,而另一个函数使用引用(它可能像上面的代码一样有一个指向数组的指针,但我不太确定)。我说过“我不确定,需要分析代码才能找出答案,但如果我必须猜测,那么 Foo2 '可能' 会更快。”他们并不印象深刻...
当我遇到类似这样的代码(或编写它)时,这让我几次感到不安,并且会想知道在这种情况下我该怎么办。
我知道...
1. 这是微观优化。 2. 编译器很可能会进行优化。
编辑:我稍微修改了代码,现在它检查空指针。