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