假设:
const int n = bigNumber;
float* f = someData;
转换有什么意义
for (int i = 0; i < n; i++)
{
f[i] += 1;
}
到
float* lastF = f + n;
for (float* i = f; i < lastF; i++)
{
*i += 1;
}
天真地看着这个,似乎我为每次迭代保存了一个加法运算(f[i]
)。
当然,这是假设我对循环内索引器的值不感兴趣。
- 我的这种心态是否正确?
- 如果是这样,我的编译器是否足够聪明,可以自行执行此操作(假设启用了所有优化标志)?
我会检查反汇编,但我不擅长阅读这些内容。
最佳答案
没有任何好处。如今,任何编译器都可以比大多数程序员做得更好更快。
如果 f[i++]
在您的代码中比 *fp++
更具可读性,请不要三思。它们将被编译为完全相同的目标代码。
关于c++ - 用指针替换循环索引器有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097906/