인수 일치 및 this 포인터
클래스 멤버 함수는 static으로 선언되었는지 여부에 따라 다르게 처리됩니다. 비정적 함수에는 this 포인터를 제공하는 암시적 인수가 있기 때문에 비정적 함수는 정적 함수보다 인수를 하나 더 갖고 있는 것으로 간주되고 그렇지 않으면 동일하게 선언됩니다.
이 비정적 멤버 함수들은 함수에 포함된 this 포인터가 함수를 요청하고 있는 개체 형식에 일치되도록 하거나 오버로드된 연산자를 위해 첫 번째 인수가 연산자가 적용되는 개체에 일치되도록 합니다. 오버로드된 연산자에 대한 자세한 내용은 오버로드된 연산자를 참조하십시오.
오버로드된 함수의 다른 인수와 달리, 임시 개체를 생성하지 않으며, this 포인터 인수와 일치시키기 위해 변환을 시도하지 않습니다.
멤버 함수에 액세스하기 위해 – > 멤버 선택 연산자가 사용되는 경우 this 포인터 인수의 형식은 class-name * const입니다. 멤버가 const 또는 volatile로 선언된 경우 형식은 각각 const class-name* const 및 volatile class-name * const입니다.
명시적 & 주소 연산자가 개체 이름 앞에 추가된다는 점을 제외하면 . 멤버 선택 연산자는 동일하게 작동합니다. 다음 예제에서는 그 작동 방식을 보여 줍니다.
// Expression encountered in code
obj.name
// How the compiler treats it
(&obj)->name
–>*의 왼쪽 피연산자 및 .* 멤버 포인터 연산자는 인수 일치에 있어서 . 및 –> 멤버 선택 연산자와 동일하게 처리됩니다.