On 29 June 2006 14:44, Richard Guenther wrote:

> But with C language constructs you cannot assume that an object
> passed to a function via a const pointer is not modified.  So, there
> is no real "const" regarding to objects pointed to.  Consider
> 
> void foo(const int *i)
> {
>   int *k = (int *)i;
>   *k = 0;
> }
> int bar(void)
> {
>   int i = 1;
>   foo(&i);
>   return i;
> }
> 
> should return 0, not 1.
   That's cheating!  You casted away const, it's a blatant aliasing violation,
you deserve everything you get.  The compiler is specifically *allowed* to
assume you don't pull stunts like this *in order to* make const-optimisation
possible and useful.


    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....

Reply via email to