For循环初始化语句中的变量声明

时间:2015-04-24 00:36:44

标签: objective-c for-loop coding-style variable-declaration

关于初始化for循环,我有一个简单的问题。

这是我的for循环声明:

for (int i=player.x-xIndex-1; i<=player.x+xIndex+1; i++)
{
    for (int j=player.y-yIndex-1; j<=player.y+yIndex+1; j++)
    {

    }
}

我的问题是:

在声明时将索引i和j的值设置为非静态整数值是不好的做法吗?

代码是否只是在执行开始时评估i和j 的最小值和最大值,还是评估这些值(即player.x + xIndex + 1等)< em>每次循环执行的单次。

你们能解决我的问题的任何亮点都会很棒!

伙计们,我是一个非常业余的人。严重。

谢谢:D

1 个答案:

答案 0 :(得分:2)

根本不是业余问题。 &#34;初始化&#34;表达式仅在第一次运行时计算,因为它们当然只使用了一次。

对于循环&#34;条件&#34; (在每次迭代结束时测试的中间表达式),在最坏的情况下,它可以在每次迭代时进行评估。因为如果(在这种情况下)player.y在循环期间实际发生了什么变化?

然而,如果大多数现代编译器能够检测到循环期间最终值可能永远不会发生变化,那么它们很可能无法在每个循环中计算整个事物。

如果你想要双重确定并处理执行的路径,你可以明确地提升&#34;提升&#34;条件结束表达式自己循环出来,如:

int maxValue = foo.x + y.bar + 12 + myString.length;
for (int i = 0; i < maxValue; i++) {
    ....

但现在标准样式免责声明:过早优化会使您的代码不易读取,无法获得可证明的收益。除非你在那个条件表达式中做了真正的工作,或者循环运行了大量的迭代,否则一些额外的计算会对你造成很大的伤害,并且可能值得保留,以便它对你自己更清楚和其他你正在尝试做的事情。