首页 >后端开发 >C++ >C 的 `->*` 和 `.*` 成员指针运算符如何工作?

C 的 `->*` 和 `.*` 成员指针运算符如何工作?

Susan Sarandon
Susan Sarandon原创
2024-11-26 16:35:14838浏览

How Do C  's `->*` 和 `.*` 成员指针运算符有效吗?
*` 和 `.*` 成员指针运算符有效吗? " />

理解 C 语言中的指针成员运算符 -> 和 .

尽管有现有文档,但仍要掌握指针的含义C 中的 -to-member 运算符 -> 和 . 可能难以捉摸。本文旨在阐明它们的功能以及在各种场景中的应用。

什么是 -> 和 .

指针到-成员运算符用于通过指针或对象引用间接访问成员函数 -> 取消引用成员函数指针以调用该成员函数。 . 取消引用成员指针以调用所指向对象的成员函数。

何时使用 -> 和 .?

  • 当你有一个指向对象:
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