有时在查看优化代码时,我看到仅在循环范围内使用的参数将其声明移到循环之外。
像这样的东西:
A arr[BIG_NUMBER];
// .... //
for (int i=0; i!=BIG_NUMBER; ++i)
{
B b = arr[i].getB();
// ... do some work with b.
}
变成这样:
A arr[BIG_NUMBER];
// .... //
B b;
for (int i=0; i!=BIG_NUMBER; ++i)
{
b = arr[i].getB();
// ... do some work with b.
}
据推测,原因是我们在不断地重新声明b
. 但这是合理的做法吗?答案是否取决于 B 是原始类型还是类?
我会认为,虽然 for 循环内变量的范围限制可能会阻止它们在循环外被访问,因为循环的内容存在于同一个堆栈帧中,但“实际”声明只发生一次。
(注意,我考虑过在循环中创建一个对象,但认为这是一个不同的问题,因为它涉及与声明相关的任何成本,而不是初始化。)
编辑 - 改进的标题