作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我有一个条件循环,它应该表现得好像它从中途开始一样,那么最好的编码方式是什么?包含 goto
的代码(如以下代码段)是否被认为是可以接受的?
goto first_itr;
do {
doSomeStuff();
first_itr:
doSomeOtherStuff();
} while(condition);
我能看到的明显效率较低的替代方案是围绕 doSomeStuff();
引入标志和条件,生成以下内容:
bool first = true;
do {
if(first)
first = false;
else
doSomeStuff();
doSomeOtherStuff();
} while(condition);
这是我在这种情况下通常使用的方法。是否可以依靠编译器通过有效地将其转换为第一个片段来改善这一点?
我能想到的其他替代方案可以避免 goto
并且条件会涉及重复代码,但这似乎比 goto
更糟糕。
此外,如果循环对性能至关重要,额外条件的开销会显着降低性能,那么答案会有所不同吗?
最佳答案
可能是这样的:
for (;;)
{
doSomeOtherStuff();
if (!condition) break;
doSomeStuff();
}
如果A=doSomeStuff();
,B=doSomeOtherStuff();
,c表示条件测试,那么我们要编码
BcABcABcABcABc ...
这可以通过遍历 ABc
block (并以某种方式在第一次迭代中避免 A
)来完成,如问题或 block BcA
在此解决方案中。与所有其他解决方案相比,此解决方案的优势在于它避免了代码重复,而代码重复是众所周知的维护问题。
关于c++ - 中途开始循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007930/
我有一个 SKSpriteNode (monsterNode) 的子类。它使用矢量自动在屏幕上运行以跟随玩家。我目前正在使用以下操作使其运行: SKAction *actionMove = [SKAc
我是一名优秀的程序员,十分优秀!