On Fri, 05 Jul 2013 10:13:11 +0100, Dmitry Olshansky
<dmitry.o...@gmail.com> wrote:
05-Jul-2013 12:55, Regan Heath пишет:
On Thu, 04 Jul 2013 20:15:08 +0100, Dmitry Olshansky
<dmitry.o...@gmail.com> wrote:
04-Jul-2013 19:00, Regan Heath пишет:
In fact, you can generalise further.
The meaning of if(x) is "compare the value of x with 0" (in C, C++,
.. ).
The value of x for a pointer is the address to which it points.
The value of x for a class reference is the address of the class to
which it refers.
If D's arrays are reference types,
They are not. It's a half-reference no wonder it has a bit of
schizophrenia now and then.
True. The struct which contains the ptr and length is actually a value
type. I think conceptually however we should be thinking of them as
reference types, because.. the array struct is effectively a lightweight
wrapper (adding length) around a reference type (ptr).
then IMO they should exhibit the same
behaviour.
The behavior should be the most useful and since arr.length != 0 is
what 99% of time a programmer wants to check.
IMO, the behaviour should be consistent. If you code if (x) then the
compiler will compare 'x' (not a property of x) to 0. Doing anything
else would be inconsistent and unexpected to anyone from a C background.
Then since slices compared to null by your logic means both ptr and
length equal 0. Completely broken idea hence I'd simply propose to
disable it.
I think I need to clarify.
I am making 3 statements here:
1. Arrays are a thin wrapper around a reference type (ptr) which add
safety. W
2. When you have a thin wrapper you should treat operations on the wrapper
as the wrapped object in the general case.
3. if (x) should compare x to 0.
Given those statements I have come to the conclusion that if (x) on an
array should compare x.ptr to 0.
Which of my statements do you disagree with, and why?
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/