【发布时间】:2016-05-05 14:34:25
【问题描述】:
每当我需要从 C++ 中的for(unsigned int i=0;i<bound;++i) 表达式中跳出时,我只需设置索引变量i=bound,与此answer 中描述的方法相同。我倾向于避免使用break 声明,因为老实说,我不太了解它实际上 的作用。
比较两条指令:
for(unsigned int i=0;i<bound;++i) {
if (I need a break) {
break;
}
}
和
for(unsigned int i=0;i<bound;++i) {
if (I need a break) {
i=bound;
}
}
我推测第二种方法在i 和bound 之间进行了一个额外的变量集,然后进行了一次额外的比较,因此从性能的角度来看,它看起来更昂贵。那么问题是打电话给break,然后做这两个测试更便宜吗?编译的二进制文件有什么不同吗?是否存在第二种方法中断的情况,或者我可以安全地选择这两种方法中的任何一种吗?
相关:Does `break` work only for `for`, `while`, `do-while`, `switch' and for `if` statements?
【问题讨论】:
-
"break" 表示执行会跳转到最内层循环之后的第一条语句
-
为了回答您的性能问题,比较两个版本之间生成的程序集(启用优化)
-
第二种方法似乎很危险,因为有一天循环限制变量将从
bound更改为size,而您会忘记替换第二个bound。 -
“我不太了解它实际上做了什么。”好吧,这很奇怪,它是最简单的构造之一。它只是立即跳出循环。
-
1) 使用更清楚地表达意图的结构(并了解
break语句的行为 - 大多数程序员可能会更清楚); 2) 可能没有任何后果的性能差异; 3)可能存在行为差异(特别是如果循环控制变量不是循环的本地变量),请注意这一点; 4)正如其他人所指出的,可能会对未来的代码维护产生影响
标签: c++ c performance break