
David Abrahams wrote:
It surprises me that BOOST_FOREACH is ever measurably different from a hand-coded loop. Can anyone explain that?
I could hazard a guess. BOOST_FOREACH uses two nested for loops. The sole purpose of the inner loop is to rebind the loop variable in case it is a reference. There is some fancy footwork to make sure the inner loop executes exactly once for each iteration of the outer loop. In addition, if the inner loop is exited with a "break," that information must be relayed to the outer loop. This is all accomplished with the help of a hidden bool, which is set, checked and reset at each iteration. It's the only overhead. For all but the most trivial loops, the cost of reading and writing a bool is lost in the noise. IMO, being able have reference loop variables is worth the very small price. -- Eric Niebler Boost Consulting www.boost-consulting.com