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

Reply via email to