This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: STL vector::resize
- From: "Jonathan Wakely" <jwakely dot gcc at gmail dot com>
- To: "John L. Kulp" <jlkjr at bioleap dot com>
- Cc: gcc <gcc at gcc dot gnu dot org>
- Date: Fri, 17 Aug 2007 23:17:16 +0100
- Subject: Re: STL vector::resize
John L. Kulp wrote:
> Shouldn't the last (optional) argument be (1) const and (2) a reference
> (rather than a potentially very expensive copying call-by-value)? Among
> other things, if you have a type declared with alignment attributes, it
> will fail on this. I notice the MSVC implementation has (1) but not
> (2). I can't see any code that would depend on the value being copied.
The standard specifies the signature. Making it const doesn't change
the signature, so that's conforming, but doesn't avoid the copy.
Making it a reference would be non-conforming.
If copy constructions are very expensive then maybe storing the types
in std::vector directly isn't a good idea. You could store them by
(smart) pointer instead, or just use capacity and push_back instead of
resize. Calling resize(n) could result in n copy constructions, so one
more for the parameter isn't going to matter in many cases.
If you remain unconvinced you might want to take the thread to
libstdc++@gcc.gnu.org rather than this list, but I'm certain noone
will change that signature while the standard says it passes by value.
Jon