Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2004-05-07 12:37:16

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

Boost list run by bdawes at, gregod at, cpdaniel at, john at