[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnucap-devel] waves branch and wave copy constructor

From: al davis
Subject: Re: [Gnucap-devel] waves branch and wave copy constructor
Date: Tue, 27 Jan 2015 18:17:33 -0500
User-agent: KMail/1.13.7 (Linux/3.2.0-4-amd64; KDE/4.8.4; x86_64; ; )

On Saturday 20 December 2014, Felix Salfelder wrote:
> std::map<X,Y>::operator[](const&X) returns a Y&, which acts
> more or less like a Y* here. thus, no copy is involved when
> accessing existant entry (speaking of c++98).

Sort of, but not here.

Even returning something by value, g++ does a good job at 
eliminating unnecessary copies.

But the map contains a bunch of <X,Y> objects, which are not the 
same as X objects and Y objects.

Every time an <X,Y> object is created, a X object and a Y object 
are copied in.

Every operator[], where a Y object is desired, unless the 
programmer is careful to use references all the way, there is a 
copy to extract the Y object from <X,Y>.

So, if you want to be sure it works like Y*, say so.  Problem 
solved.  That's one reason the DISPATCHER contains pointers.

> FWIW, in c++11, not even upon creating a new pair (accessing
> a nonexisting map element) the copy constructor of Y is
> called. they did a great job in avoiding unnecessary copies,
> which they are totally aware of.

That brings up the question of when gnucap should officially use 
c++11.  It's compliant with both new and old now.  There are 
some features in C++11 that I would like to use, but put off 
waiting for widespread availability.

This brings back memories of the transition to C++ from C, to C 
from FORTRAN/Ratfor, use of STL, use of plugins ...  ACS/Gnucap 
has traditionally led the pack in things like this, but always 
with a little caution "widespread availability".

There was a significant reduction in code size and memory use, 
and a slight improvement in speed with the transition to C++.

> i'm not fully convinced that the current implementation calls
> more copies than it should. but sure, i might be missing
> something.

There are!  The untested() macro tells me so!

reply via email to

[Prev in Thread] Current Thread [Next in Thread]