|
Boost : |
Subject: Re: [boost] Heads up - string_ref landing
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2012-11-16 10:27:37
On Nov 16, 2012, at 7:00 AM, Maxim Yanchenko <MaximYanchenko_at_[hidden]> wrote:
> Olaf van der Spek <ml <at> vdspek.org> writes:
>> On Fri, Nov 16, 2012 at 3:25 PM, Mathias Gaunard
>> <mathias.gaunard <at> ens-lyon.org> wrote:
>>> void f(std::string const&);
>>> f("Olaf");
>>
>> Are compilers/optimizers not smart enough to construct the temporary
>> object at compile time?
>
> I'm afraid they are not smart enough to eliminate an unneeded temporary when
> it's something sophisticated like std::string
Actually, this is a really good example.
void f(std::string const&);
void g(string_ref);
f("Olaf");
g("Olaf");
In the call to "f", the compiler will create a temporary std::string. This will involve a call to strlen (possibly done at compile time), a memory allocation (modulo the small-string optimization), and copying the data.
In the call to "g", the compiler will create a temporary string_ref. This will involve a call to strlen (possibly done at compile time).
And for most cases, the code internal to "f" and "g" won't care that they got a string_ref instead of a const std::string.
-- Marshall
Marshall Clow Idio Software <mailto:mclow.lists_at_[hidden]>
A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
-- Yu Suzuki
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk