this 포인터 형식
const 및 volatile 키워드를 사용하면 함수 선언에서 this 포인터의 형식을 수정할 수 있습니다. 이러한 키워드 하나 이상의 특성을 포함하도록 함수를 선언하려면 함수 인수 목록 뒤에 키워드를 추가합니다.
다음 예제를 고려해 보십시오.
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
위의 코드는 X 멤버 함수를 선언합니다. 여기서 this 포인터는 const 개체에 대한 const 포인터로 처리됩니다. cv-mod-list 옵션 조합도 사용할 수 있지만, 사용하는 경우 항상 this 포인터 자체가 아니라 this가 가리키는 개체가 수정됩니다. 따라서 다음 선언은 X 함수를 선언하며 this 포인터는 const 개체에 대한 const 포인터입니다.
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
멤버 함수에서 this의 형식은 다음 구문으로 설명됩니다. 여기서 cv-qualifier-list는 멤버 함수 선언자에서 결정되며 const 또는 volatile이거나 둘 다일 수 있고, class-type은 클래스의 이름입니다.
[cv-qualifier-list] class-type * const this
즉, this는 항상 const 포인터이며 다시 할당할 수 없습니다. 멤버 함수 선언에서 사용되는 const 또는 volatile 한정자는 해당 함수 범위의 this가 가리키는 클래스 인스턴스에 적용됩니다.
다음 표에서 이러한 한정자의 작동 방식에 대해 자세히 설명합니다.
한정자의 의미
한정자 |
의미 |
---|---|
const |
멤버 데이터를 변경할 수 없습니다. const가 아닌 멤버 함수는 호출할 수 없습니다. |
volatile |
액세스할 때마다 메모리에서 멤버 데이터를 로드하고 특정 최적화를 비활성화합니다. |
const 개체를 const가 아닌 멤버 함수로 전달할 때 발생하는 오류입니다. 마찬가지로 volatile 개체를 volatile이 아닌 멤버 함수로 전달할 때 발생하는 오류입니다.
const로 선언된 멤버 함수는 멤버 데이터를 변경할 수 없습니다. 이러한 함수에서 this 포인터는 const 개체에 대한 포인터입니다.
참고
생성자와 소멸자는 const 또는 volatile로 선언할 수 없습니다.그러나 const 또는 volatile 개체에 대해 생성자와 소멸자를 호출할 수는 있습니다.