Casting away const
Don
nospam at nospam.com
Mon Aug 9 07:27:09 PDT 2010
Steven Schveighoffer wrote:
> On Mon, 09 Aug 2010 09:57:47 -0400, bearophile
> <bearophileHUGS at lycos.com> wrote:
>
>> Steven Schveighoffer:
>>> I thought it was "you're on your own", not undefined behavior. The
>>> former
>>> implies there is some "right" way to do this if you know more about the
>>> data than the compiler, the latter implies that there is no right way to
>>> cast away const. Am I wrong?
>>
>> In my opinion if this thing is well designed then you go in undefined
>> behaviour only when you change the contents of something after you
>> have removed its const nature with a cast. Just casting const away and
>> then reading the data can't be undefined behaviour, otherwise casting
>> const away is useless and can be totally disallowed.
>
> Casting away const just to read the data is useless. You can read const
> data without a cast.
No you can't. You can't pass it to a C function.
>
> But my understanding is that casting away const to write should be
> doable if you know what you're doing. If this is undefined behavior,
> then that's fine, I'm just unclear on what "undefined behavior" actually
> means. I thought "undefined behavior" means that you cannot count on
> the behavior to work in the future.
>
> An example of where casting away const to write should be allowed is for
> a hypothetical mutable member:
>
> class C
> {
> private Mutable!(int) cache = -1;
> int expensiveFunction() const { return cache == -1 ? cache =
> _expensiveFunctionImpl() : cache; }
> private int _expensiveFunctionImpl() const {...}
> }
>
> If this is undefined, then something like this cannot be relied on, even
> when performance is critical.
>
> -Steve
I really can't see how the compiler could make that work, without
destroying most of the benefits of const. For example, if that code is
legal, it disallows most const-related optimisation.
More information about the Digitalmars-d-learn
mailing list