On 2/21/2015 4:31 PM, rumbu wrote:
My intention is not to have a read-only getter, I want to call SomeProp
on a const object:
class S
{
private int cache = -1;
private int SomeExpensiveOp() { return 12345; }
public @property const(int) SomeProp()
{
if (cache = -1)
cache = SomeExpensiveOp();
return cache;
}
}
const is transitive. If an instance of S is const, then all of its
members are const, too. You cannot modify cache in that case. Assuming
cache only needs to be initialized once, you can do this instead:
this() { cache = SomeExpensiveOp(); }
public @property const(int) SomeProp() const
{
return cache;
}
Notice the const on the end of SomeProp. That makes the function
callable on a const instance, but you still cannot modify cache inside
of it.