$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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 www.boost-consulting.com