Logical const

Don nospam at nospam.com
Tue Nov 30 07:06:40 PST 2010


Peter Alexander wrote:
> D does not support logical const due to the weak guarantees that it 
> provides.
> 
> So, without logical const, how are D users supposed to provide lazy 
> evaluation and memoization in their interfaces, given that the interface 
> should *seem* const, e.g.
> 
> class Matrix
> {
>   double getDeterminant() const { /* expensive calculation */ }
> }
> 
> If it turns out that getDeterminant is called often with the raw matrix 
> data remaining unchanged, how can we add caching to this class without 
> rewriting the const-ness of all code that touches it?
> 
> And how do we write generic code when it's practically impossible to 
> determine const-ness from a glance? e.g. getDeterminant looks like it 
> should be const, but wouldn't be if it had caching, so writing generic 
> code that uses getDeterminant would be very difficult.

What are the use cases for logical const? Are there any other important 
ones, apart from caching?



More information about the Digitalmars-d mailing list