C++ 像边做边做一样边做边做

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(

是否有办法在进入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( 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应该非常快。此外,我认为编译器应该进一步优化它