C++ 像边做边做一样边做边做
是否有办法在进入for循环之前不评估停止条件?一种C++ 像边做边做一样边做边做,c++,C++,是否有办法在进入for循环之前不评估停止条件?一种do for循环 for(int i = 0; f(i); // This check is guaranteed to pass when i is 0, // and the check is expensive ++i) { // body } bool skip_start = true; for(int i = 0; skip_start || i < 10; i++) { if(
do for
循环
for(int i = 0;
f(i); // This check is guaranteed to pass when i is 0,
// and the check is expensive
++i)
{
// body
}
bool skip_start = true;
for(int i = 0; skip_start || i < 10; i++)
{
if( i == 0 ) skip_start = false;
// ...
}
是将其转换为do while
循环的唯一选项?bool skip\u start=true;
for(int i = 0;
f(i); // This check is guaranteed to pass when i is 0,
// and the check is expensive
++i)
{
// body
}
bool skip_start = true;
for(int i = 0; skip_start || i < 10; i++)
{
if( i == 0 ) skip_start = false;
// ...
}
对于(int i=0;跳过|u开始| i<10;i++)
{
如果(i==0)跳过_开始=false;
// ...
}
你的意思是这样的?如果你确信第一次计算循环条件时,它会通过,那么最简单的重构就是将主体从循环中提出来:
// body (replace uses of i with 0)
for (int i = 1; f(i); ++i) // start loop from 1 instead of 0
{
// body
}
怎么样
i==0 | |昂贵的_check()
|
短路且不计算第二个,如果第一个为真,则可以在的之外执行第一个操作。因此,i
可以从1开始,也可以小于19@RisingSun这导致了多余的代码我不相信你。你能展示一些初始检查重要的benachmarks吗?这不是一个do-while循环吗?为什么要引入另一个变量并检查一些简单地重新排列指令的东西?如果你认为“i<10”是昂贵的,那么可能是“i==0”同样昂贵,这取决于“i”的工作方式。所以,在这种情况下,检查bool肯定不贵。简单的解决方案,内存不贵。但是,do while
更合适。我不知道你的I<10
有多贵,但是,比较bool应该非常快。此外,我认为编译器应该进一步优化它