D2.0: an example of use-case for casting invariant away

Walter Bright newshound1 at digitalmars.com
Thu Jun 21 00:32:53 PDT 2007


Don Clugston wrote:
> Walter Bright wrote:
>> With D, you can cast away const-ness, that is legal. But if you 
>> subsequently modify the underlying data, that is undefined behavior.
> 
> It sounds that in D, it will be too easy to cast away constness 
> accidentally.
> With C++, at least you can grep for const_cast and detect potentially 
> dangerous code, and you get a strong visual clue.
> Suppose I've written a D function like this:
> 
> void f(int *b, uint c)
> {
>   // maybe I'm avoiding a compiler warning or something.
>   uint *d = cast(uint *)b;
>   d += c;
> }
> 
> Months later, I'm refactoring the code, and I convert the int * 
> parameter to an invariant, without recognising that it's changing the 
> value of b. Oops.
> 
> C++'s const would catch this mistake, but if I understand correctly, D 
> will compile it without error. Suddenly the function has moved into the 
> realm of undefined behaviour.
> 
> I hope I'm wrong. Or did I miss something?

No, you're not missing something. It is a general problem with cast - 
cast is a blunt instrument which can easily hide problems.



More information about the Digitalmars-d mailing list