Getting the const-correctness of Object sorted once and for all

Era Scarecrow rtcvb32 at yahoo.com
Sun May 13 20:33:46 PDT 2012


On Monday, 14 May 2012 at 03:19:57 UTC, Jonathan M Davis wrote:
> But with the way const in D works, I suspect that the folks who 
> are looking for absolutely every CPU cycle and want caching and 
> lazy-loading in their types are going to avoid const as 
> completely as possible and figure out how to work around it for 
> those 4 functions, whereas in C++, they'd probably use const 
> liberally and use mutable where necessary.>

  Seems like perhaps the opposite approach (limited of course) 
could be taken. Assume a 'mutable' keyword was used, where in the 
case an object/struct was made const, it would allow you to break 
the const system only for that variable. Could work, assuming 
it's not accessing ROM or something.

struct A {
   string st;
   mutable uint hash; //always mutable

   uint toHash() {
     if (!hash)
       hash = st.toHash();
     return hash;
   }
}

unittest{
   A a = A("TEST");
   immutable A b = A("TEST");

   assert(a.toHash() == b.toHash());
}

  But that seems like a badly done workaround, and if you really 
wanted the hash cached, you would have it calculated during 
construction before it was returned. Something like that is 
likely more trouble than it's worth, plus it would easily be 
abused.


More information about the Digitalmars-d mailing list