这个运算符的名称是什么 - > *?

时间:2014-02-22 06:09:56

标签: c++ operators

我见过一个例子。在该示例中,有一行像x->*y。它是什么? ->*。我是C ++编程的新手,我对运算符知之甚少。任何人都能形容它吗?

2 个答案:

答案 0 :(得分:4)

它被称为“指向指针成员的指针”,并且是“指向成员的指针”类型操作符之一(除了.*,“指向对象成员的指针”)。

当您获取成员变量或类的函数的地址时,您可以使用它,然后您想要访问该变量或在该类的实例上调用该函数,给定指向该实例的指针(如香草)数据或函数指针,但是对于一个类成员)。

以下是使用函数指针的示例:

#include <cstdio>
using namespace std;

class Example {
public:
  Example (int value) : value_(value) { }
  void printa (const char *s) { printf("A %i %s\n", value_, s); }
  void printb (const char *s) { printf("B %i %s\n", value_, s); }
private:
  int value_;
};

// print_member_ptr can point to any member of Example that
// takes const char * and returns void. 
typedef void (Example::* print_member_ptr) (const char *);

int main () {

  print_member_ptr ptr;
  Example x(1), y(2), *p = new Example(3), *q = new Example(4);

  ptr = &Example::printa;
  // .*ptr and ->*ptr will call printa
  (x.*ptr)("hello");
  (y.*ptr)("hello");
  (p->*ptr)("hello");
  (q->*ptr)("hello");

  ptr = &Example::printb;
  // now .*ptr and ->*ptr will call printb
  (x.*ptr)("again");
  (y.*ptr)("again");
  (p->*ptr)("again");
  (q->*ptr)("again");

}

输出结果为:

A 1 hello
A 2 hello
A 3 hello
A 4 hello
B 1 again
B 2 again
B 3 again
B 4 again

有关详细信息,请参阅http://en.cppreference.com/w/cpp/language/operator_member_access

答案 1 :(得分:2)

a 指向的对象的 b 指向的成员。

<强>语法

a->*b

作为K的成员

R &operator ->*(K a, S b);

课外定义

R &K::operator ->*(S b);

请参阅Wikipedia