.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