.init of field == type's initializer or field initializer?

Jonathan M Davis jmdavisProg at gmx.com
Thu May 19 22:34:29 PDT 2011


On 2011-05-19 20:19, Andrej Mitrovic wrote:
> From: http://d-programming-language.org/property.html
> .init Property:
> ".init produces a constant expression that is the default initializer. If
> applied to a type, it is the default initializer for that type. If applied
> to a variable or field, it is the default initializer for that variable or
> field. For example: "
> 
> struct Foo
> {
>     int a;
>     int b = 7;
> }
> 
> Foo.a.init	// is 0
> Foo.b.init	// is 7
> 
> Foo.b.init is actually 0. Are the docs wrong, or is the compiler wrong? Let
> me know so I can fix the docs if necessary as I'm doing that now.

import std.stdio;
import std.string;

struct Foo
{
    int a;
    int b = 7;
}

void main()
{
    assert(Foo.init.a == 0);
    assert(Foo.init.b == 7);
    assert(Foo.a.init == 0);
    assert(Foo.b.init == 0);
}

This runs and passes. It is correct. I believe that you are confusing 
Foo.init.b and Foo.b.init. The value of b for Foo.init is 7, but the init 
value for an int is always 0.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list