通过分支语句和普通循环编写循环之间的区别是什么

时间:2013-06-14 12:40:56

标签: c++ loops

通过分支跳转语句和普通循环编写循环之间的区别 例如

        main()
        {
        int i=0;
        while(i<9)
        {
          //do something
           i++;
        }

        main()
        {
            int i=0;
            label:
             //do something
              i++;
             if(i<9)
              goto label;
         }

两者的表现是否相等?

3 个答案:

答案 0 :(得分:10)

这两个循环不等效:第二个循环类似于do / while循环,而不是while循环:

main() {
    int i=0;
    do {
      //do something
       i++;
    } while(i<9);
}

就性能而言,两者应该是相同的;但是,使用goto suffers considerably的解决方案的可读性,所以我不会在任何项目中使用它。

答案 1 :(得分:2)

不同之处在于第一个更容易阅读,这就是为什么goto通常被避免的原因。同样如dasblinkenlight's answer中指出的那样,语义也不尽相同。

性能应该大致相同,因为CPU必须执行跳转才能实现这两者。当然,通过更高级别的意图描述(如第一种情况),编译器能够优化某些内容的可能性会增加。

也许不是在这种特殊情况下,但一般来说,首选更高级别的描述,然后循环结构优于goto

答案 2 :(得分:2)

在这种情况下,编译器应生成等效输出。但我不认为这两个例子是等价的 - while首先检查条件,然后决定执行机构。您使用goto的示例首先执行正文,然后检查条件 - 它的行为更像do while语句。

在这种情况下,您不应该使用goto,因为它会降低可读性。 goto仅在有限数量的情况下有效。

相关问题