顺序和并行 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);
}