On Thu, 30 Jan 2014 11:04:44 -0500, Cooler <kul...@hotbox.ru> wrote:

On Thursday, 30 January 2014 at 16:01:32 UTC, Cooler wrote:
On Thursday, 30 January 2014 at 15:59:48 UTC, Cooler wrote:
On Thursday, 30 January 2014 at 15:51:44 UTC, Tobias Pankrath wrote:
On Thursday, 30 January 2014 at 15:49:35 UTC, Cooler wrote:
I agree. I just want that the case can be expressed in language syntax more obvious - something like "fun(int[] const x){}" to emphasize that I understand that fun() can change content of array, and cannot change the {pointer,size} pair.

That's what fun(int[] x) does :)

-Steve

Again...
void fun(int[] x){ x ~= 5; }
auto a = new int[10];
fun(a); // Can you predict the content of 'a'?


It's [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

No!!! It depends how runtime allocates memory for the array. Read http://dlang.org/d-array-article.html.
If 'a' has internal space enough to place '5' the caller will see
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].

Sorry!!! My mistake. The caller will see [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] :)

But that is the proof. The intention of fun() implementer will not be achieved. And such misunderstanding will appear only at runtime.

void foo(int x)
{
   x = 5;
}

"hey, why doesn't that work! Setting a parameter to another value should be illegal!"

-Steve

Reply via email to