首页  >  文章  >  后端开发  >  C 的 `->*` 和 `.*` 成员指针运算符有什么区别?

C 的 `->*` 和 `.*` 成员指针运算符有什么区别?

Linda Hamilton
Linda Hamilton原创
2024-11-19 04:24:03592浏览

What's the Difference Between C  's `->*` 和 `.*` 成员指针运算符?
*` 和 `.*` 成员指针运算符? " />

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

尽管已经探索了现有资源,您可能仍然发现自己对以下内容感到困惑C 中神秘的 -> 和 . 运算符本文旨在阐明它们的真实含义。

理解指针成员运算符的目的

-> 和 . 都是便于间接访问成员函数的指针成员运算符本质上意味着它们使您能够通过指针而不是调用成员函数。

语法和用法

  • ->: 此运算符用于取消引用指向对象的成员函数的指针,其语法为。 (ptr->member_func_ptr)().
  • .: 与 -> 类似,此运算符也取消引用指向成员函数的指针。但是,当通过对象的指针或类取消引用指针时,会使用它。其语法为 (object_ptr.*member_func_ptr)().

何时使用 -> 与 .

  • ->*: 使用此运算符通过指向对象的指针取消引用指向成员函数的指针。
  • .*: 通过对象的指针或类取消引用指向成员函数的指针时使用此运算符。

示例

考虑 X 类具有以下成员函数:f() 和 g()。假设您有一个指向 f() 函数的指针:

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

typedef void (X::*pointer)();
pointer somePointer = &X::f;

要使用对象 x 调用 somePointer,您可以使用:

X x;
(x.*somePointer)(); // Calls x.f()

如果 x 不是对象但是指向对象的指针,您可以使用 ->* 调用成员函数,如下所示:

X* px = new X;
(px->*somePointer)(); // Calls px->f()

这个示例说明了使用-> 或 . 在通过指针间接访问成员函数时至关重要,尤其是在处理指向的对象时。

以上是C 的 `->*` 和 `.*` 成员指针运算符有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn