auto init & what the code means
Andrej Mitrovic
andrej.mitrovich at gmail.com
Sun Dec 26 05:54:12 PST 2010
int i; // auto-initialized to int.init
int i = void; // not initialized
There is no ambiguity. If you want to play with non-initialized values
(and play a superhero) you have to work extra and "initialize" those
variables with void, which means they're uninitialized.
On 12/26/10, spir <denis.spir at gmail.com> wrote:
> Hello,
>
> I have a problem with D's auto-init feature. When reading in someone else's
> code
> int i;
> there is no way, I guess, to know whether this means "i is initialised to 0"
> or "i is left undefined". For this reason, in the former case I do
> explicitely initialise. Thus,
> int i = 0; // means initialised
> int i; // means undefined _for me_
> But, as _for me_ emphasizes, another reader still cannot guess the latter
> case.
>
> I would enjoy having an idiom to express this clearly. Without it, a
> possibility may be to use a conventional comment like
> int i; // undef
> in public code (esp Phobos) and spread the word about it. (Then, variable
> declarations without init or comment are known to be by people who do not
> use this convention, and we know we need to search farther in code to
> interpret them.)
>
> Note that this problem does not apply to floats or pointers/refs, for which
> .init is invalid for operating anyway. But there is a weird ambiguity about
> null/uninitialised arrays & strings which behave like empty in most cases. I
> would enjoy this to be clarified as well. For instance:
> int[] ints1 = [];
> ints1 ~= 1; // ok
> int[] ints2;
> ints2 ~= 1; // error
> So that arrays behave like pointed/ref'ed thingies. (But I'm unsure about
> the best way.) (*)
>
> Denis
>
> (*) This is also related to the boolean / null-compare value os arrays and
> strings:
> void main()
> {
> writeln("array -- undef");
> int[] ints1;
> writeln('(',ints1,')');
> if (ints1) writeln("ints1");
> if (ints1 != null) writeln("ints1");
> if (ints1 !is null) writeln("ints1");
> ints1 ~= 1;
> writeln('(',ints1,')');
>
> writeln("array -- def");
> int[] ints2 = [];
> writeln('(',ints2,')');
> if (ints2) writeln("ints2");
> if (ints2 != null) writeln("ints2");
> if (ints2 !is null) writeln("ints2");
> ints2 ~= 1;
> writeln('(',ints2,')');
>
> writeln("string -- undef");
> string str1;
> writeln('(',str1,')');
> if (str1) writeln("str1");
> if (str1 != null) writeln("str1");
> if (str1 !is null) writeln("str1");
> str1 ~= '1';
> writeln('(',str1,')');
>
> writeln("string -- def");
> string str2 = "";
> writeln('(',str2,')');
> if (str2) writeln("str2");
> if (str2 != null) writeln("str2");
> if (str2 !is null) writeln("str2");
> str2 ~= '1';
> writeln('(',str2,')');
> }
> ==>
> array -- undef
> ()
> ([1])
> array -- def
> ()
> ([1])
> string -- undef
> ()
> (1)
> string -- def
> ()
> str2
> str2
> (1)
> -- -- -- -- -- -- --
> vit esse estrany ☣
>
> spir.wikidot.com
>
>
More information about the Digitalmars-d
mailing list