다음을 통해 공유


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 개체에 대해 생성자와 소멸자를 호출할 수는 있습니다.

참고 항목

참조

this 포인터