Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
August 07, 2010 Is "is" the same as ptr == ptr for arrays? | ||||
---|---|---|---|---|
| ||||
Is the following equalent? int[] a; int[] b = a; assert(a is b); assert(a.ptr == b.ptr); |
August 07, 2010 Re: Is "is" the same as ptr == ptr for arrays? | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | On 7/08/10 4:33 PM, simendsjo wrote:
> Is the following equalent?
>
> int[] a;
> int[] b = a;
> assert(a is b);
> assert(a.ptr == b.ptr);
No.
(a is b) implies (a.ptr == b.ptr)
but
(a.ptr == b.ptr) does not imply (a is b)
For example:
int[] a = [1, 2, 3];
int[] b = a[0..1];
Here, a.ptr == b.ptr, but a !is b.
The ptr property returns a pointer to the first element, which is true in this case, but it doesn't mean that they both refer to the same range.
|
August 07, 2010 Re: Is "is" the same as ptr == ptr for arrays? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Peter Alexander | On 07.08.2010 18:04, Peter Alexander wrote:
> On 7/08/10 4:33 PM, simendsjo wrote:
>> Is the following equalent?
>>
>> int[] a;
>> int[] b = a;
>> assert(a is b);
>> assert(a.ptr == b.ptr);
>
> No.
>
> (a is b) implies (a.ptr == b.ptr)
>
> but
>
> (a.ptr == b.ptr) does not imply (a is b)
>
> For example:
>
> int[] a = [1, 2, 3];
> int[] b = a[0..1];
>
> Here, a.ptr == b.ptr, but a !is b.
>
> The ptr property returns a pointer to the first element, which is true
> in this case, but it doesn't mean that they both refer to the same range.
Ok, thanks. Does this mean this equivalent then?
int[] a = [1,2,3];
int[] b = a[0..1];
assert(a !is b);
assert(a.ptr == b.ptr && a.length == b.length);
|
August 07, 2010 Re: Is "is" the same as ptr == ptr for arrays? | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | simendsjo <simen.endsjo@pandavre.com> wrote: > Ok, thanks. Does this mean this equivalent then? > > int[] a = [1,2,3]; > int[] b = a[0..1]; > assert(a !is b); > assert(a.ptr == b.ptr && a.length == b.length); Well, no. But what you probably mean, is. ( a is b ) == ( a.ptr == b.ptr && a.length == b.length ) -- Simen |
August 07, 2010 Re: Is "is" the same as ptr == ptr for arrays? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen kjaeraas | Hello Simen, > simendsjo <simen.endsjo@pandavre.com> wrote: > >> Ok, thanks. Does this mean this equivalent then? >> >> int[] a = [1,2,3]; >> int[] b = a[0..1]; >> assert(a !is b); >> assert(a.ptr == b.ptr && a.length == b.length); > Well, no. both asserts will fail (a.length == 3 != b.length == 1) > But what you probably mean, is. > > ( a is b ) == ( a.ptr == b.ptr && a.length == b.length ) I think that is correct. -- ... <IXOYE>< |
Copyright © 1999-2021 by the D Language Foundation