this 포인터this pointer

this 포인터는 class , struct 또는 형식의 비정적 멤버 함수 내 에서만 액세스할 수 있는 포인터입니다 union .The this pointer is a pointer accessible only within the nonstatic member functions of a class, struct, or union type. 멤버 함수가 호출되는 개체를 가리킵니다.It points to the object for which the member function is called. 정적 멤버 함수에는 this 포인터가 없습니다.Static member functions don't have a this pointer.

구문Syntax

this
this->member-identifier

설명Remarks

개체의 this 포인터가 개체 자체의 일부가 아닙니다.An object's this pointer isn't part of the object itself. 개체에 대 한 문의 결과에는 반영 되지 않습니다 sizeof .It's not reflected in the result of a sizeof statement on the object. 개체에 대해 비정적 멤버 함수를 호출 하면 컴파일러가 개체의 주소를 함수에 숨겨진 인수로 전달 합니다.When a nonstatic member function is called for an object, the compiler passes the object's address to the function as a hidden argument. 예를 들어, 다음 함수 호출은For example, the following function call:

myDate.setMonth( 3 );

다음과 같이 해석 될 수 있습니다.can be interpreted as:

setMonth( &myDate, 3 );

개체의 주소는 멤버 함수 내에서 포인터로 사용할 수 있습니다 this .The object's address is available from within the member function as the this pointer. 대부분의 this 포인터는 암시적입니다.Most this pointer uses are implicit. 의 멤버를 참조할 때 명시적를 사용 하는 것은 불필요 하지만 필요 하지 this class 않습니다.It's legal, though unnecessary, to use an explicit this when referring to members of the class. 예를 들면 다음과 같습니다.For example:

void Date::setMonth( int mn )
{
   month = mn;            // These three statements
   this->month = mn;      // are equivalent
   (*this).month = mn;
}

식은 *this 일반적으로 멤버 함수에서 현재 개체를 반환 하는 데 사용 됩니다.The expression *this is commonly used to return the current object from a member function:

return *this;

this 포인터는 자체 참조를 방지 하는 데도 사용 됩니다.The this pointer is also used to guard against self-reference:

if (&Object != this) {
// do not execute in cases of self-reference

참고

포인터는 this 수정할 수 없으므로 포인터에 대 한 할당 this 은 허용 되지 않습니다.Because the this pointer is nonmodifiable, assignments to the this pointer are not allowed. 이전의 c + + 구현에서는에 대 한 할당을 사용할 수 this 있습니다.Earlier implementations of C++ allowed assignment to this.

경우에 따라 this 포인터가 직접 사용 됩니다. 예를 들어 struct 현재 개체의 주소가 필요한 자체 참조 데이터 ures를 조작 합니다.Occasionally, the this pointer is used directly — for example, to manipulate self-referential data structures, where the address of the current object is required.

예제Example

// this_pointer.cpp
// compile with: /EHsc

#include <iostream>
#include <string.h>

using namespace std;

class Buf
{
public:
    Buf( char* szBuffer, size_t sizeOfBuffer );
    Buf& operator=( const Buf & );
    void Display() { cout << buffer << endl; }

private:
    char*   buffer;
    size_t  sizeOfBuffer;
};

Buf::Buf( char* szBuffer, size_t sizeOfBuffer )
{
    sizeOfBuffer++; // account for a NULL terminator

    buffer = new char[ sizeOfBuffer ];
    if (buffer)
    {
        strcpy_s( buffer, sizeOfBuffer, szBuffer );
        sizeOfBuffer = sizeOfBuffer;
    }
}

Buf& Buf::operator=( const Buf &otherbuf )
{
    if( &otherbuf != this )
    {
        if (buffer)
            delete [] buffer;

        sizeOfBuffer =  strlen( otherbuf.buffer ) + 1;
        buffer = new char[sizeOfBuffer];
        strcpy_s( buffer, sizeOfBuffer, otherbuf.buffer );
    }
    return *this;
}

int main()
{
    Buf myBuf( "my buffer", 10 );
    Buf yourBuf( "your buffer", 12 );

    // Display 'my buffer'
    myBuf.Display();

    // assignment operator
    myBuf = yourBuf;

    // Display 'your buffer'
    myBuf.Display();
}
my buffer
your buffer

포인터의 형식입니다. thisType of the this pointer

this 포인터의 형식은 함수 선언에서 및 키워드로 수정할 수 있습니다 const volatile .The this pointer's type can be modified in the function declaration by the const and volatile keywords. 이러한 특성 중 하나를 포함 하는 함수를 선언 하려면 함수 인수 목록 뒤에 키워드를 추가 합니다.To declare a function that has either of these attributes, add the keyword(s) after the function argument list.

예를 들어 보겠습니다.Consider an example:

// type_of_this_pointer1.cpp
class Point
{
    unsigned X() const;
};
int main()
{
}

위의 코드는 X this 포인터를 const 개체에 대 한 포인터로 처리 하는 멤버 함수를 선언 합니다 const .The preceding code declares a member function, X, in which the this pointer is treated as a const pointer to a const object. Cv-mod 목록 옵션의 조합을 사용할 수 있지만 항상 포인터가 아니라 포인터가 가리키는 개체를 수정 합니다 this .Combinations of cv-mod-list options can be used, but they always modify the object pointed to by the this pointer, not the pointer itself. 다음 선언은 함수를 선언 합니다 X . 여기서 this 포인터는 const 개체에 대 한 포인터입니다 const .The following declaration declares function X, where the this pointer is a const pointer to a const object:

// type_of_this_pointer2.cpp
class Point
{
    unsigned X() const;
};
int main()
{
}

this 멤버 함수에서의 형식은 다음 구문으로 설명 됩니다.The type of this in a member function is described by the following syntax. Cv 한정자 목록은 멤버 함수의 선언 자에서 결정 됩니다.The cv-qualifier-list is determined from the member function's declarator. const 또는 volatile (또는 둘 다) 일 수 있습니다.It can be const or volatile (or both). * class -type* 은의 이름입니다 class .class-type is the name of the class:

[cv-한정자-목록] * class -형식* ** * const this **[cv-qualifier-list] class-type * const this

즉, this 포인터는 항상 const 포인터입니다.In other words, the this pointer is always a const pointer. 다시 할당할 수 없습니다.It can't be reassigned. const volatile 멤버 함수 선언에 사용 되는 또는 한정자는 class this 해당 함수의 범위에서 포인터가 가리키는 인스턴스에 적용 됩니다.The const or volatile qualifiers used in the member function declaration apply to the class instance the this pointer points at, in the scope of that function.

다음 표에서 이러한 한정자의 작동 방식에 대해 자세히 설명합니다.The following table explains more about how these modifiers work.

한정자의 의미 thisSemantics of this modifiers

한정자Modifier 의미Meaning
const 멤버 데이터를 변경할 수 없습니다. 가 아닌 멤버 함수를 호출할 수 없습니다 const .Can't change member data; can't invoke member functions that aren't const.
volatile 멤버 데이터는 액세스할 때마다 메모리에서 로드 됩니다. 특정 최적화를 사용 하지 않습니다.Member data is loaded from memory each time it's accessed; disables certain optimizations.

개체를이 const 아닌 멤버 함수에 전달 하는 것은 오류입니다 const .It's an error to pass a const object to a member function that isn't const.

마찬가지로 개체를이 volatile 아닌 멤버 함수에 전달 하는 것도 오류입니다 volatile .Similarly, it's also an error to pass a volatile object to a member function that isn't volatile.

멤버로 선언 된 멤버 함수는 const 멤버 데이터를 변경할 수 없습니다. 이러한 함수에서 this 포인터는 개체에 대 한 포인터입니다 const .Member functions declared as const can't change member data — in such functions, the this pointer is a pointer to a const object.

참고

Con struct ors 및 de struct ors는 또는로 선언할 수 없습니다 const volatile .Constructors and destructors can't be declared as const or volatile. 그러나 또는 개체에 대해 호출 될 수 const 있습니다 volatile .They can, however, be invoked on const or volatile objects.

참고 항목See also

C++ 키워드Keywords