Пусть X
будет классом с функцией-членом f()
.
this
— это неявный аргумент для f()
, он имеет тип X* const
.
Затем, если f() const
является константной функцией-членом, тип указателя this
теперь будет const X* const
.
В обоих случаях кажется, что тип указателя this
— const
. Почему же тогда внутри определения функции f()
разрешено изменять любой член данных класса X
? Разве мы не должны всегда прибегать к const_cast
как в
void X::f() {
const_cast <int&> (member) = 1;
}
Если f() const
константа, то можно сделать так:
void X::f() const{
const_cast <int&> (member) = 1;
}
(или вы также можете иметь изменяемый член)
Но почему это работает
void X::f() {
member = 1;
}
this
; это был механизм размещения объекта в определенной области памяти, теперь замененный размещениемnew
. - person Pete Becker   schedule 19.04.2013