> On Jun 15, 2018, at 9:16 AM, Derek Atkins <warl...@mit.edu> wrote:
>
> John Ralls <jra...@ceridwen.us> writes:
>
>> A very good catch indeed. But pre-constructing the string in
>> qofbook.cpp only saves two string constructions per invocation as the
>> vector still has to make its own copies. I guess that its much worse
>> for you because the ancient gcc on Ubuntu 14.04 (gcc4.8) doesn't do
>> small-string optimization.
>
> Is there any reason we cant use std::string& in the vector? Or do we
> think that we might lose references there?
>
In this instance the string is static so it would be safe to use const
std::string&, but while there's an is_volatile type trait there's no is_static
so we can't insert a static assert to catch cases where the actual std::string
is on the stack. That could lead to some ugly bugs.
Besides, using strings is still leaving performance on the table: A string
comparison is n times longer than an int comparison where n is the number of
consecutive leading characters that are the same in the two strings. I got a
huge speedup on loading a few months ago because GncGUID's operator==() was
doing a character-wise comparison of the ascii representation instead of
comparing the two int64_ts of the actual GUID.
Regards,
John Ralls
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel