Immutable member functions and private members

simendsjo simendsjo at gmail.com
Wed Aug 3 01:37:58 PDT 2011


I have a struct with a private member that is only ever accessed through 
a single property method - even from within the struct.
As this property fills the value on the first access, it cannot be 
immutable, and as such, none of the many methods accessing this property 
can be immutable methods.

This is according to specification, but I thought that since the single 
write to the property is done at one, and only one, access point, that 
it would be safe?

I could fill this value in the constructor, but it's a bit slow, so I'd 
rather do it only if needed.

And is there any potential performance optimizations done by the 
compiler, or is it "only" for safety?
Is there a way to hack around this, and more importantly, is it safe to 
do so, or will I open Pandora's box?


Small example:

int len(const char[] c) {
     return c.length;
}

struct S {
     private immutable(char)[] _v;
     @property immutable(char[]) v() { // Cannot be immutable method
         if(!_v)
             _v = "init"; /* or from external function */
         return _v;
     }

     @property int a() { // and so this cannot be immutable method
         return len(v); /* notice the property function v that might 
modify _v */
     }
}

void main() {
     S s;
     s.a;
}


More information about the Digitalmars-d-learn mailing list