如何对某个类型的每个成员执行循环主体?我知道我可以在循环之后为maxval重复循环的主体,但这将是重复代码,这是不好的。我也可以用身体做一个函数,但对我来说也是错误的,因为函数应该是小的,简单的,并且循环的身体是巨大的。
const auto minval = std::numeric_limits<T>::min();
const auto maxval = std::numeric_limits<T>::max();
for (auto i = minval; i < maxval; ++i) {
// huge body of the loop
}发布于 2014-11-09 20:27:48
它就像在处理最后一项之后停止一样简单:
auto i = minval;
while(1) {
// do all the work for `i`
if (i == maxval) break;
++i;
}还可以将增量移动到循环的顶部,前提是在第一次传递时跳过它:
i = minval;
switch (1) {
case 0:
do {
++i;
case 1:
// processing for `i`
} while (i != maxval);
}后一种版本更直接地转换为高效的机器代码,因为每个循环迭代只有一个条件分支,并且有一个无条件的分支,而在第一个循环中,有一个条件分支和一个无条件的分支,它们都重复每次迭代。
两个版本都不会增加最终值,这可能是未定义的行为。
https://stackoverflow.com/questions/26831625
复制相似问题