peculiarities with char[] and std.string
Kyle K
Kyle_member at pathlink.com
Mon Jun 19 11:08:56 PDT 2006
In article <e76jri$1ds7$1 at digitaldaemon.com>, BCS says...
>> Ah ok, that makes sense. So using 'in' with arrays and aggregate types will
>> always still give you a reference? I assume with primitives the semantics remain
>> pass-by-value, such that foo(in int b) will never modify the caller's data?
>>
>>
>Actually "in" always gives you a copy of the actual "thing". Arrays are
>reference types so you get a copy of the reference. Same with objects,
>as they are also reference types. Stucts on the other hand are not
>reference types and as such will get passed by value
>
>
>class fooC{int i;}
>struct fooS{int i;}
>
>
>void main()
>{
> fooC c1= new fooC, c2;
> c1.i = 0;
> c2 = fn(c1);
> writef(c1.i, " ", c2.i, \n); // prints "1 1"
>
> fooS s1, s2;
> s1.i = 0;
> s2 = fn(s1);
> writef(s1.i, " ", s2.i, \n); // prints "0 1"
>
>}
>
>fooC fn(in fooC v)
>{
> v.i=1;
> return v;
>}
>
>fooS fn(in fooS v)
>{
> v.i=1;
> return v;
>}
Got it, thanks a bunch. I knew it had to be something simple... :D
More information about the Digitalmars-d-learn
mailing list