顺序和并行 for 循环中 'continue' 的常用关键字
Common keyword to 'continue' in sequential and parallel for loops
在顺序 for
循环中,可以通过调用 continue
中断当前迭代。同样,在 Concurrency::parallel_for
循环中,当前迭代 - 这是一个调用 lambda 函数的线程 - 可以用 return
.
中断
时不时地,我不得不调试一个 parallel_for
循环,让它按顺序执行,而忘记将 return
更改为 continue
,因为在 void
函数,编译器不会报错。这有时会导致很难追踪的错误。
我想知道 Visual C++ 2013 是否提供任何机制来对两个循环使用相同的 keyword/macro/…。这可能吗?
由于您仅将顺序循环用于调试,因此您可以转换为也使用 lambda 的版本:
parallel_for (first, last, [&](size_t i)
{
if(condition)
return;
do_stuff(i);
});
变身
for (size_t i = first; i < last; i++)[&]
{
if(condition)
return;
do_stuff(i);
}();
确实很丑。但如果它只是为了调试而存在,它就不会保持这种状态。
或者,您可以将所有 lambda 函数包装在一个执行单次迭代的循环中,并始终使用 continue
而不是 return
。缺点是你丑化了非调试代码。
parallel_for (first, last, [&](size_t i)
{
do {
if(condition)
continue; // same as return
do_stuff(i);
} while(0);
});
以顺序形式工作相同:
for (size_t i = first; i < last; i++)
{
do {
if(condition)
continue; // same as continue without the do/while
do_stuff(i);
} while(0);
}
在顺序 for
循环中,可以通过调用 continue
中断当前迭代。同样,在 Concurrency::parallel_for
循环中,当前迭代 - 这是一个调用 lambda 函数的线程 - 可以用 return
.
时不时地,我不得不调试一个 parallel_for
循环,让它按顺序执行,而忘记将 return
更改为 continue
,因为在 void
函数,编译器不会报错。这有时会导致很难追踪的错误。
我想知道 Visual C++ 2013 是否提供任何机制来对两个循环使用相同的 keyword/macro/…。这可能吗?
由于您仅将顺序循环用于调试,因此您可以转换为也使用 lambda 的版本:
parallel_for (first, last, [&](size_t i)
{
if(condition)
return;
do_stuff(i);
});
变身
for (size_t i = first; i < last; i++)[&]
{
if(condition)
return;
do_stuff(i);
}();
确实很丑。但如果它只是为了调试而存在,它就不会保持这种状态。
或者,您可以将所有 lambda 函数包装在一个执行单次迭代的循环中,并始终使用 continue
而不是 return
。缺点是你丑化了非调试代码。
parallel_for (first, last, [&](size_t i)
{
do {
if(condition)
continue; // same as return
do_stuff(i);
} while(0);
});
以顺序形式工作相同:
for (size_t i = first; i < last; i++)
{
do {
if(condition)
continue; // same as continue without the do/while
do_stuff(i);
} while(0);
}