>백엔드 개발 >C++ >C의 `->*` 및 `.*` 포인터-멤버 연산자는 어떻게 작동합니까?

C의 `->*` 및 `.*` 포인터-멤버 연산자는 어떻게 작동합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-26 16:35:14877검색

How Do C  's `->*` 및 `.*` 포인터-멤버 연산자 작업?
*` 및 `.*` 포인터-멤버 연산자가 작동합니까? " />

C의 포인터-멤버 연산자 이해 -> 및 .

기존 문서에도 불구하고 포인터의 의미 파악 -to-member 연산자 -> 및 .는 C에서 파악하기 어려울 수 있습니다. 기사의 목적은 다양한 시나리오에서의 기능과 적용을 명확히 하는 것입니다.

-> 및 .는 무엇입니까?

멤버 포인터 연산자는 객체에 대한 포인터나 참조를 통해 간접적으로 멤버 함수에 액세스하는 데 사용됩니다. ->는 멤버 함수 포인터를 역참조하여 멤버 함수를 호출합니다. 참조된 객체.는 가리키는 객체의 멤버 함수를 호출하기 위해 멤버 포인터를 역참조합니다.

사용 시기 -> 및 .?

  • 에 대한 포인터가 있는 경우 ->*를 사용하세요. 객체:
X* px = new X;
pointer somePointer = &X::f;
(px->*somePointer)(); // Calls px->f()
  • 객체에 대한 참조가 있는 경우 .*를 사용하세요.
X& rx = x;
pointer somePointer = &X::f;
(rx.*somePointer)(); // Calls rx.f()
  • x.somePointer()를 사용하지 마세요. px->somePointer(): 이 구문은 존재하지 않는 멤버 함수를 호출하려고 시도하기 때문에 유효하지 않습니다.

다음을 고려하세요. 다음 코드:

struct X
{
   void f() {}
   void g() {}
};

int main()
{
   X x;
   void (X::*pointer)() = &X::f;

   // Call x.f() using .*
   (x.*pointer)();

   X* px = new X;

   // Call px->f() using ->*
   (px->*pointer)();

   return 0;
}

이 예에서 포인터는 멤버 함수 포인터를 역참조합니다. &X::f 그리고 이를 포인터에 할당합니다. 그런 다음 x에서 .를 사용하여 x.f()를 호출하고 ->를 px에서 사용하여 px->f()를 호출합니다.

->의 차이점을 이해하면 ; 및 . 그리고 각각이 적절한 경우 개발자는 C에서 멤버 함수 포인터와 간접 함수 호출을 효과적으로 처리할 수 있습니다.

위 내용은 C의 `->*` 및 `.*` 포인터-멤버 연산자는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.