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