我正在阅读有关哈希函数的内容(我是一名中级 CS 学生)并遇到了这个问题:
int hash (const string & key, int tableSize) {
int hasVal = 0;
for (int i = 0; i < key.length(); i++)
hashVal = 37 * hashVal + key[i];
.....
return hashVal;
}
我正在查看这段代码,并注意到如果在 for 循环中而不是每次我们这样做时调用 key.length() 会更快:
int n = key.length();
for (int i = 0; i < n; i++)
我的问题是,既然这是一种稍微提高性能的明显方法,编译器会自动为我们做这件事吗?我对编译器还不太了解,但我很好奇这个问题的答案。在编写代码以使用较少的操作时,人们经常指出,我所做的事情通常已经由编译器为我完成,所以我在浪费时间,而是在做诸如内联函数之类的事情。我关心这一点,因为我正在编写一个游戏,其中物理处理需要高效,这样事情就不会显得笨重。