X
을 회원 함수 f()
인 클래스로 지정하십시오."this"포인터가 항상 const입니까?
this
은 f()
의 암시적인 인수이며, 형식은 X* const
입니다.
그런 다음 f() const
이 const 멤버 함수 인 경우 this
포인터의 형식은 이제 const X* const
입니다.
두 경우 모두 포인터는 const
입니다. 그렇다면 함수 f()
정의 내에서 X
의 데이터 멤버를 수정하는 것이 허용되는 이유는 무엇입니까? 우리는 항상 f() const
가 CONST 인 경우, 다음이 할 수있는 방법입니다
void X::f() {
const_cast <int&> (member) = 1;
}
같이 const_cast
에 의지 안 :
void X::f() const{
const_cast <int&> (member) = 1;
}
(또는 당신은 또한 수 있습니다 구성원 변경 가능)
그러나 이것이 작동하는 이유는 무엇입니까
void X::f() {
member = 1;
}
그리고 C++의 초창기에 다시 ** 것들을 혼란스럽게 만들 수있었습니다 ** 수정 'this'; 이것은 객체를 메모리의 특정 영역에 배치하는 메커니즘으로, 이제는 'new'라는 배치로 대체되었습니다. –