Question about D's quantum-esque type system
    Sean Kelly 
    sean at f4.ca
       
    Wed Aug 16 11:30:05 PDT 2006
    
    
  
nobody wrote:
> It is my understanding that only structs guarantee you an order of the 
> fields you define while not allowing constructors. Which means whether 
> you want to initialize the fields via static struct building functions 
> or member functions you have no assurance the struct fields hold 
> meaningful data unless by happenstance you have a situation in which the 
> default values of the fields can be creatively used to get a freshly 
> initialized struct to be meaningful.
For what it's worth, you can specify a default value for struct members, 
you just can't supply a this() function:
     struct S
     {
         int  x = 5;
         char y = 'a';
     }
     void main()
     {
         S s;
         printf( "%d\n%c\n", s.x, s.y );
     }
prints:
     5
     a
> However, classes allow a constructor but at the loss of any guarantee of 
> the order of the fields. So you can be sure your initialized class 
> starts out with meaningful values but you cannot map the class instance 
> directly onto some data structure in memory nor can a class instance 
> imitate a data structure.
I'll admit I'm a bit disappointed that my .isizeof proposal was ignored, 
as it would have been nice to be able to construct class instances into 
static buffers.  I would be surprised if member order were not 
guaranteed (though a more compact layout may be possible if the compiler 
could rearrange data), but offset is obviously affected by data in any 
parent classes.
Sean
    
    
More information about the Digitalmars-d-learn
mailing list