Jos*_*ino 22 c++ loops for-loop goto break
几天前我开始了一个快速的开源项目,当一些伙伴查看svn上的代码时,其中一个告诉我break在for循环中使用语句被认为是有害的,不应该这样做.
但他补充说,我会在Linux内核源代码的循环break内找到几个语句for,但这只是因为只有Linus Torvalds和Chuck Norris被允许使用它而没有其他人.
你怎么看?我看到在使用没有问题break一个内for循环.在我看来,模拟break使用布尔变量或类似的东西的行为增加了许多不必要的开销,并使代码不那么简单.
而且,没有比较的余地goto,因为break不能随意改变程序的流程从一个点到另一个谎言goto.
fir*_*gle 45
我觉得使用休息没问题.总是存在你想要停止处理循环的情况,并且使用一个break;更有意义(并使其更具可读性!),而不是将循环计数器设置为一个值,使得循环在下一次迭代时停止.
Mat*_*hen 41
强制性:
关键是你不应该纯粹基于不良做法(或速度赛)来避免它,而是根据具体情况考虑.
这都是关于清晰度的.正如你所说,你永远不必使用它,但在某些情况下它会提高可读性.当循环通常正常终止时它很有用,但在极少数情况下你必须摆脱困境.通常(或总是)破坏的循环更多的是代码气味(但仍然可能是合适的).
Tha*_*tos 21
使用不仅没有问题break,我会说有人说它被认为是"有害的"是彻头彻尾的错误.
break是一种语言功能,用于中止循环 - 你可以使用goto,但随后你会产生下面XKCD漫画的(适当的)愤怒.您可以在条件中使用标志,但这会妨碍可读性.break不仅是最简单的,而且也是最常见的方式来摆脱循环.使用它本来就是用来使用它.
编辑:在这里进一步了解:当你编写代码时,"我应该使用X或Y语言特征"的指导原则应该是"哪种方式会产生更优雅的代码"?在代码中,优雅几乎是一门艺术,但我将它放在可读性和算法(读取:不是微优化)效率之间的平衡.可读性将由长度,代码的复杂性等决定.单行boost :: bind可能比3行循环更难阅读和理解.
如果语言功能可以帮助您编写在完成工作时更容易理解的代码,那么请使用它.这适用于break,gotoC++例外等.不要盲目地遵循"X是(邪恶|被认为有害)" - 每次都应用常识和逻辑.
| 归档时间: |
|
| 查看次数: |
59622 次 |
| 最近记录: |