Why struct opEquals must be const?

so so at so.do
Mon Oct 18 02:02:49 PDT 2010


If you want to invoke a generic function that calls some methods of your  
input, most of the time you need to be sure these methods are  
"const-correct", especially when your input is const.

It is both a good and bad thing.

On Sun, 17 Oct 2010 09:57:02 +0300, Nick Sabalausky <a at a.a> wrote:

> Is there a technical reason why the l- and r- values for opEquals must be
> const? If the restriction is purely for the intuitive notion that  
> there's no
> heisenstructs, then I have an example I think might be worth  
> consideration:
> lazy caching.
>
> If comparison isn't always needed and requires a potentially expensive
> computation that isn't likely needed otherwise (for example, a wrapper  
> for
> string that does case-insensitive comparisons, if it's used in a  
> situation
> that does more assigning/slicing/etc than comparing), then it may make  
> sense
> to wait until an opEquals is called, and then compute the information and
> cache it. But that requires mutating state and so can't be done in a  
> struct
> opEquals.
>
> 'Course, if there is a technical reason for the restriction, then all  
> this
> is moot.
>
>


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/


More information about the Digitalmars-d mailing list