gpt4 book ai didi

c++ - 编译器会优化转义内部循环吗?

转载 作者:可可西里 更新时间:2023-11-01 18:04:13 26 4
gpt4 key购买 nike

我的代码如下所示(显示了 done 的所有用法):

bool done = false;
for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
{
done = true;
break;
}
...
}
if(done) break;
...
}

编译器会把它转换成这样吗:

for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
goto __done; // same as a labeled break if we had it
...
}
...
}
__done:;

注意:虽然我最感兴趣的是 if(done)break; 是否作为死代码被绕过和删除,但我也对它是否感兴趣并且 done 被完全删除。

最佳答案

显然这取决于编译器。当您不确定时,最好的办法是查看编译器的汇编输出(所有流行的编译器都有一个开关)。即使您不熟悉汇编,您至少可以将调试版本与优化版本进行比较。

也就是说,这是 goto 不是坏主意的少数情况之一。随意使用它来跳出内部循环。

编辑

刚刚在 VS2010 中尝试了以下,它确实优化了外部条件:

bool done = false;
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
if(i == 7 && j == 3)
{
done = true;
break;
}
}
if(done) break;
}
return 0;

关于c++ - 编译器会优化转义内部循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com