initializer list like in C++?

James Dennett jdennett at acm.org
Tue Jul 24 12:04:09 PDT 2007


BCS wrote:
> Reply to James,
> 
>> Jarrett Billingsley wrote:
>>
>>> "Hoenir" <mrmocool at gmx.de> wrote in message
>>> news:f84rnt$1db0$1 at digitalmars.com...
>>>
>>>> Is there anything like the initializer list (C++) in D?
>>>>
>>>> class Test {
>>>> int x;
>>>> Test(int y):x(y){};
>>>> }
>>> No.  See
>>> http://www.digitalmars.com/d/archives/digitalmars/D/initialization_li
>>> sts_55262.html for an explanation on why D doesn't have them.
>>>
>> I looked at that thread, but found only references to performance,
>> which miss the main reason why these are present/useful in C++:
>> semantics.  There are various kinds of things in C++ that can be
>> initialized but cannot be modified, because of references, const-ness,
>> and classes with immutable value semantics.
>>
>> The occasional/slight performance benefit is definitely secondary to
>> the ability to express meaning directly in the code.
>>
>> As D gains the ability to model such immutable members, it might
>> benefit from finding (its own) solution to the same issue.
>>
> 
> IIRC  this works
> 
> const int i;
> static this(){i=5;}
> 
> class C
> {
>   const char c;
>   this(char c_){c=c_;}
> }

Can c be modified more than once during construction?  If not,
what rules are used to determine when it's been modified?

Java came up with "definite assignment" rules for this kind of
things, and they're pretty decent -- they guarantee that a final
value is assigned a value exactly once, while allowing for some
flexibility such as setting it down all branches of an if/else.

-- James


More information about the Digitalmars-d-learn mailing list