通过分支语句编写循环和普通循环之间的区别是什么?
what is the between in writing a loop by branching statement and a normal loop
通过分支跳转语句编写循环与普通循环之间的区别是什么例如
main()
{
int i=0;
while(i<9)
{
//do something
i++;
}
和
main()
{
int i=0;
label:
//do something
i++;
if(i<9)
goto label;
}
两者的性能是否相等?
这两个循环是不等价的:第二个循环类似于do
/while
循环,而不是while
循环:
main() {
int i=0;
do {
//do something
i++;
} while(i<9);
}
就性能而言,两者应该相同;但是,goto
解决方案的可读性受到很大影响,因此我将避免在您的任何项目中使用它。
区别在于第一个更容易阅读,这就是为什么通常避免使用goto
。正如dasblinkenlight的回答所指出的那样,语义是不一样的。
性能应该是相同的,因为CPU为了实现两者必须进行跳转。当然,有了更高层次的意图描述(如第一种情况),编译器能够优化某些东西的机会就会增加。
可能不是在这个特殊的情况下,但一般来说,更高级地描述您想要做的事情是首选,然后循环结构比goto
更好。
在这种情况下,编译器应该产生等效的输出。但是我不认为这两个例子是等价的——while
首先检查条件,然后决定是否执行语句体。goto
的例子首先执行语句体,然后检查条件——它的行为更像do while
语句。
在这种情况下不应该使用goto
,因为它会降低可读性。goto
s仅在有限的场景中有效
相关文章:
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- 当数组位于两个循环之间时,您可以调用数组的 void 函数吗?
- 为什么 for 循环和 while 循环之间的 continue 不同?
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- C++ if 语句将条件设置为 true 和循环中的 OR-ing 条件之间的行为差异
- pthread_yield无法在线程之间正确循环
- matlab 和 c++ 中的 while 循环之间的区别
- 我是否应该避免在循环中的常数之间进行操作
- 在 C 中并行化嵌套循环的几种方法之间的差异,C++使用 OpenMP
- 符号和未签名整数表达式之间的比较,以进行循环误差
- OPENCV MAT问题:直方图和此循环之间的差异
- 三个数字之间的 C++ 相加两个更高的数字,没有循环和数组
- 开放MP;嵌套循环之间的操作
- 本应生成 2 个介于 1 和 9 之间的随机数的程序C++只生成 6 和 9 并且没有正确循环
- OpenMP 嵌套循环,每个"for"循环之间都有代码
- 在基于范围的 for 循环中,& 和 && 之间有什么区别?
- 如何在不同的for循环之间切换,这样的机制是否有意义
- 通过分支语句编写循环和普通循环之间的区别是什么?
- C++ 在循环之间保持值的同名局部变量
- 如何在两个无限循环之间交替