On Mon, 08 Nov 2010 14:22:36 -0500, Ali Çehreli <acehr...@yahoo.com> wrote:
Steven Schveighoffer wrote:
> On Mon, 08 Nov 2010 13:35:38 -0500, Daniel Gibson
>> If you pass a dynamic array to a function and chance it's size within
>> the function, you have undefined behaviour - you never know if it
will
>> affect the original array (from the calling function) or not.
>
> Not exactly. If you happen to change its size *and* change the
original
> data afterwards, then it's somewhat undefined
Let's also note that appending to the array qualifies as "change its
size *and* change the original data afterwards." We cannot be sure
whether appending affects the passed-in array.
No, it doesn't. If you are appending to data that was passed in, you are
not changing the *original data* passed in. You are only appending to it.
for example:
char[] s = "foo".dup;
s ~= "bar";
does not change the first 3 characters at all. So any aliases to s would
not be affected. However, any data aliased to the original s may or may
not be aliased to the new s. Once you start changing that original data
(either via s or via an alias to the original s), this is where the
confusing behavior occurs.
In my experience, this does not cause a problem in the vast majority of
cases.
-Steve