首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环初始化语句的变量声明

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

Stack Overflow用户
提问于 2015-04-24 00:36:43
回答 1查看 65关注 0票数 0

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

下面是我的for循环声明:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-24 00:41:21

一点都不是业余的问题。“初始化”表达式只在第一次运行时计算,因为它们当然只使用了一次。

对于循环的“条件”(在每次迭代结束时测试的中间表达式),在最坏的情况下,可以计算每个迭代。因为如果(在本例中) player.y实际上在循环期间发生了更改,怎么办?

但是,大多数现代编译器可能不会计算每一个循环的整个过程,如果它们能够检测到结束值在循环过程中永远不会改变的话。

如果您想要加倍确定并处理执行路径,您可以显式地“提升”条件结束表达式,您可以自己离开循环,例如:

代码语言:javascript
复制
int maxValue = foo.x + y.bar + 12 + myString.length;
for (int i = 0; i < maxValue; i++) {
    ....

但是现在标准风格的免责声明:过早地优化可能会降低代码的可读性,而没有任何可证明的好处。除非您在条件表达式中执行真正的工作,或者循环正在运行数以万亿计的迭代,否则一些额外的计算不会对您造成太大的伤害,并且可能值得保留,以便您自己和其他人更清楚您想要做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29836755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档