[RFA] Algorithms vs operator* and operator==
chris
caj@cs.york.ac.uk
Tue Nov 9 18:49:00 GMT 2004
Paolo Carlini wrote:
> Hi,
>
> seems to me the natural development of the improvements to locale_facets
> and stl_numeric but want to make sure I'm not missing something before
> actually starting on it.
>
> The fundamental observation is rather trivial: for a generic
> input_iterator
> both operator* and operator== can be expensive and we should do our best
> to minimize the number of calls throughout in the library.
>
> This morning I changed tentatively std::replace_copy (see attached) and
> benchmarked this type of test on my home machine:
>
....
>+ const _ValueType __value = *__first;
>
>
I apologise for the (I suspect) slightly confusing mails I've been
sending on this subject, but I believe I have finally sorted out what I
want to say...
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).
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?
Chris
More information about the Libstdc++
mailing list