Behaviour of append (~=)
Oskar Linde
oskar.lindeREM at OVEgmail.com
Tue May 30 06:20:45 PDT 2006
Derek Parnell skrev:
> On Tue, 30 May 2006 21:37:02 +1000, Lionello Lunesu
> <lio at lunesu.remove.com> wrote:
>
>> Why does the appending to a 'null' array cause the contents to be copied?
>>
>> int[] ar1; // some array, not constant
>>
>> int[] ar2 = null;
>> ar2 ~= ar1;
>> // ar2 !is ar1
>>
>> But it could be like this:
>> if (ar2)
>> ar2 ~= ar1;
>> else
>> ar2 = ar1;
>>
>> Wouldn't it be a good optimization for ~= to check for null first, to
>> prevent the copy?
>
> Not so sure, because for consistency sake its good to know that 'append'
> will always do a copy. Then we can rely on this to happen.
But does it? Isn't n repeated appends guaranteed to give at most log(n)
allocations? How can that be if all appends force a copy? A simple test:
char[] a = "abcdefgh";
char[] b = a[0..3];
b ~= "xx";
writefln("a = %s",a);
prints:
abcxxfgh
/Oskar
More information about the Digitalmars-d-learn
mailing list