关于初始化循环,我有一个简单的问题。
下面是我的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等)。每次循环执行时。
如果你们能对我的问题有所了解,那就太棒了!
伙计们,我是个业余爱好者。我是认真的。
谢谢:D
发布于 2015-04-24 00:41:21
一点都不是业余的问题。“初始化”表达式只在第一次运行时计算,因为它们当然只使用了一次。
对于循环的“条件”(在每次迭代结束时测试的中间表达式),在最坏的情况下,可以计算每个迭代。因为如果(在本例中) player.y实际上在循环期间发生了更改,怎么办?
但是,大多数现代编译器可能不会计算每一个循环的整个过程,如果它们能够检测到结束值在循环过程中永远不会改变的话。
如果您想要加倍确定并处理执行路径,您可以显式地“提升”条件结束表达式,您可以自己离开循环,例如:
int maxValue = foo.x + y.bar + 12 + myString.length;
for (int i = 0; i < maxValue; i++) {
....但是现在标准风格的免责声明:过早地优化可能会降低代码的可读性,而没有任何可证明的好处。除非您在条件表达式中执行真正的工作,或者循环正在运行数以万亿计的迭代,否则一些额外的计算不会对您造成太大的伤害,并且可能值得保留,以便您自己和其他人更清楚您想要做的事情。
https://stackoverflow.com/questions/29836755
复制相似问题