This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [RFA] Algorithms vs operator* and operator==
- From: Paolo Carlini <pcarlini at suse dot de>
- To: chris <caj at cs dot york dot ac dot uk>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Mon, 15 Nov 2004 12:58:33 +0100
- Subject: Re: [RFA] Algorithms vs operator* and operator==
- References: <418A2C03.8040500@suse.de> <4190098F.5000201@cs.york.ac.uk>
chris wrote:
This seems to be the line we have trouble with, as it could lead to an
expensive copy. I haven't fully tested it yet, but I wonder if this
line would be better expressed as:
typeof(*__first) __value = *__first; (where I've only just found typeof).
Nice idea! But...
I've done some benchmarks, and I'm reasonably convinced that this is
both safe and the most efficent way of doing things. If *__first is a
reference, we just store the reference and access it twice. If
*__first is returned by value, then we only get it by value once and
use it twice. Does this seem safe / sensible?
... while seems safe and sensible to me, I'm not sure that we really
want to add this kind of complexity to the code (also involving an
extension): how much slow at computing operator* and operator== can we
expect an input_iterator to be? In fact, our internal worst case,
istreambuf_iterator, is now doing much better than before and some tests
of mine show that probably there isn't much left to gain... Can you also
benchmark a little more with current mainline?
Other opinions?
Thanks!
Paolo.