Why is this legal
int i=4;
const int *l=&i;
cout<<*l;
i=6;
cout<<*l;
(shows 46)
But this isn't?
int i=4;
const int *l=&i;
*l=4;
(those 2 being the same, conceptually, from my understanding)
The way I understand those 2 examples is that both shouldn't be allowed, but the former works. Why is this?
CodePudding user response:
A pointer-to-const only promises that the pointee won't be changed using this pointer, not in general.
And even this promise can be broken without UB with const_cast
, if the pointee object isn't truly const
.
CodePudding user response:
You're allowed to change i
, since it's not const
.
When I do i = 6;
, I'm assigning a value to an int
, which is legal.
When I do *l = 4;
, I'm assigning a value to something as though it was declared a const int
, which is not legal.
All const int* l;
means is that l
is not allowed to change the value of the int
it points to; it doesn't mean no-one is allowed to.